Node.js는 Blob을 만들 수 없습니까?


85

node.js로 작업 중이며 내 오디오를 node.js 서버로 스트리밍했습니다. 이제 오디오 블롭을 작성하는 과정에서 발견했습니다.

var audioBlob = new Blob([dataview], { type: 'audio/wav' });

새 Blob에서 ReferenceError가 발생합니다. Blob이 지원되지 않는 것 같습니다. node.js fs 모듈로 저장하고 싶은 blob을 어떻게 만들 수 있습니까?

감사합니다!


4
Blob이란 무엇입니까? 그거 어디서 났어?
Pete

1
네,하지만 blob은 기본 Node.js 유형이 아닙니다. 숫자, 문자열, 부울, 객체, 배열 등. 필요한 것과 같은 것이 있는지 NPM을 확인 했습니까?
sent1nel 2013

4
나에게는 반대표를 던진 사람들이이 질문에 대한 해결책이 분명히 없다는 것을 이해하지 못한 것 같습니다. 그것이 제가 묻는 이유입니다.
zer02 2013

1
@Jonathan 나는 이것에 대해 살펴볼 것이지만 MIME 유형을 정의 할 수 있습니까?
zer02 2013

1
@ zer02 예, 아니오. 여전히 동적이므로에 mime속성을 추가 할 수 있습니다 Buffer. 그러나 MIME 유형은 이진 데이터 통신용입니다. 디스크에 저장하기에는 그리 많지 않습니다.
Jonathan Lonowski

답변:


33

이 문제에 대한 해결책은 배열 버퍼와 노드 버퍼간에 변환 할 수있는 함수를 만드는 것입니다. :)

바이너리 NodeJS 버퍼를 JavaScript ArrayBuffer로 변환

최근 노드 버전에서는 다음과 같습니다.

let buffer = Buffer.from(arraybuffer);
let arraybuffer = Uint8Array.from(buffer).buffer;

작동하게 하셨나요? 오디오를 파일로 녹음 할 수 있지만 적절한 시간이 되어도들을 수 없습니다.
Gabriel

도와주세요? 요점에서 이와 같은 일을 했습니까? gist.github.com/anonymous/11302966
Gabriel

16
안녕하세요, 당신과 같은 것이 필요하지만 당신의 해결책을 이해하지 못합니다. 이 var audioBlob = new Blob ([dataview], {type : 'audio / mp3'}); 그러나 당신의 예제에서 "arrayBuffer"변수를 사용합니다
oihi08

7
이다 let arraybuffer와 같은 당신의 예에 new Blob?
mesqueeb

1
ArrayBufferLike다음에서 특정 속성이 누락 된 것으로 보입니다 Blob.ts Argument of type 'ArrayBufferLike' is not assignable to parameter of type 'File | Blob'. Type 'ArrayBuffer' is not assignable to type 'File | Blob'. Type 'ArrayBuffer' is missing the following properties from type 'Blob': size, type, arrayBuffer, stream, text
Mateja Petrovic

11

그냥 사용하십시오 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;

0

고려해야 할 또 다른 솔루션은 Base64 문자열 을 사용하는 것입니다. 하여 서버에서 클라이언트로 데이터를 전송하는 것입니다.

저는 ArrayBuffer의 형태로 오디오 데이터를 수신하는 Node.js 프로젝트에서 작업 중이며 해당 데이터를 브라우저에서 보내고 재생하고 싶습니다. 내 투쟁의 대부분은 ArrayBuffer를 클라이언트에 보내거나 ArrayBuffer를 변환하고 버퍼를 보내려고 시도하는 데서 왔습니다.

저에게 간단한 해결책이 된 것은

  1. 서버에서 ArrayBuffer를 Base64로 인코딩 된 문자열로 변환
  2. 서버에서 클라이언트로 Base64 문자열 반환 / 보내기
  3. 클라이언트 측에 오디오 요소 / 객체를 만들고 사운드를 재생합니다.

나는 base64-arraybuffer 를 사용하여 ArrayBuffer> Base64 String 변환을 수행했습니다 (패키지없이 간단하게 수행 할 수 있음).

여기의 팁을 사용 하여 클라이언트 측에서 오디오 요소를 만들었습니다.

* 제한을 테스트하는 방법을 많이 수행하지 않았기 때문에 이것이 대용량 오디오 파일을 어떻게 처리 할 수 ​​있을지 모르겠습니다.


-2

제안으로 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에 게시하면 디스크에 기록됩니다. 원하는 유효성 검사를 수행 할 수 있습니다.


안녕하세요 저는 GetUserMedia Audio의 오디오 버퍼를 node.js 서버로 스트리밍했고 배열을 WAV로 인코딩하고 싶습니다.
zer02 2013

recorder.js를 사용했습니다. 나는 그것을 연장했다. 문제는 클라이언트 측이 아닌 서버 측 Blob을 만드는 것입니다. node.js에 직접 오디오를 스트리밍하고 서버에 wav / mp3 파일을 빌드하고 싶기 때문에 node.js 내부에 blob을 만드는 방법이 있는지 알아야합니다. :-)
zer02

Blob의 내용을 가져 와서 버퍼에 넣고 버퍼를 쏠 수 있습니까? 노드는 버퍼를 처리하는 방법을 알고 있으며 이진 데이터를 버퍼에 넣을 수 있습니다.
sent1nel 2013

오디오가 처음에 클라이언트 측에서 녹음되고 node.js로 처리되고 작동 할 때 이미 클라이언트 측 blob 바이너리를 node.js (스트리밍)로 전송했습니다. 이번에는 node.js가 전체 프로세스를 제어하기를 원합니다.
zer02
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.