node.js로 작업 중이며 내 오디오를 node.js 서버로 스트리밍했습니다. 이제 오디오 블롭을 작성하는 과정에서 발견했습니다.
var audioBlob = new Blob([dataview], { type: 'audio/wav' });
새 Blob에서 ReferenceError가 발생합니다. Blob이 지원되지 않는 것 같습니다. node.js fs 모듈로 저장하고 싶은 blob을 어떻게 만들 수 있습니까?
감사합니다!
답변
이 문제에 대한 해결책은 배열 버퍼와 노드 버퍼간에 변환 할 수있는 함수를 만드는 것입니다. 🙂
바이너리 NodeJS 버퍼를 JavaScript ArrayBuffer로 변환
최근 노드 버전에서는 다음과 같습니다.
let buffer = Buffer.from(arraybuffer);
let arraybuffer = Uint8Array.from(buffer).buffer;
답변
그냥 사용하십시오 cross-blob
:
const Blob = require("cross-blob");
new Blob([]);
//=> Blob {size: 0, type: ""}
// Global patch (to support external modules like is-blob).
globalThis.Blob = Blob;
답변
고려해야 할 또 다른 솔루션은 Base64 문자열 을 사용하는 것입니다. 하여 서버에서 클라이언트로 데이터를 전송하는 것입니다.
저는 ArrayBuffer의 형태로 오디오 데이터를 수신하는 Node.js 프로젝트에서 작업 중이며 해당 데이터를 브라우저에서 보내고 재생하고 싶습니다. 내 투쟁의 대부분은 ArrayBuffer를 클라이언트에 보내거나 ArrayBuffer를 변환하고 버퍼를 보내려고 시도하는 데서 왔습니다.
저에게 간단한 해결책이 된 것은
- 서버에서 ArrayBuffer를 Base64로 인코딩 된 문자열로 변환
- 서버에서 클라이언트로 Base64 문자열 반환 / 보내기
- 클라이언트 측에 오디오 요소 / 객체를 만들고 사운드를 재생합니다.
나는 base64-arraybuffer 를 사용하여 ArrayBuffer> Base64 String 변환을 수행했습니다 (패키지없이 간단하게 수행 할 수 있음).
여기의 팁을 사용 하여 클라이언트 측에서 오디오 요소를 만들었습니다.
* 제한을 테스트하는 방법을 많이 수행하지 않았기 때문에 이것이 대용량 오디오 파일을 어떻게 처리 할 수 있을지 모르겠습니다.
답변
제안으로 http://howtonode.org/really-simple-file-uploads 를 읽으십시오 .
제 말은 당신이 뭘하려고하는지 모르겠네요. blob을위한 모듈이 없을 수도 있지만, 디스크에 무언가를 쓰고 싶다면 fs 모듈이 있습니다.이 코드는 직접 작동하지 않지만 ..
var fs = require('fs')
, express = require('express')
app.post('/upload', function (req, res) {
// asynch call to write file to disk
fs.write("/tmp/file.mp3", req.params.body, function (err) {
if (err) console.log(err)
});
res.end();
});
mp3 또는 실제로 무엇이든 / upload에 게시하면 디스크에 기록됩니다. 원하는 유효성 검사를 수행 할 수 있습니다.