2016-08-02 4 views
0

私のアプリはWebSocketを介してクライアントに送り返す前に、WebオーディオをクライアントからストリーミングしてMP3としてエンコードすることになっています。ノード - どのように新しいREADABLEストリームにパイプすることができますか?

このようなファイルへ 私は現在エンコードすることができます

とパイプ:私は、しかし

var mp3File = fs.createReadStream('audio.mp3'); 

      mp3File.on('data', function(buffer){ 
       io.sockets.emit('audio', { buffer: buffer }); 
      }); 

inbound_stream.pipe(encoder).pipe(fs.createWriteStream('audio.mp3')); 

そして、もし私はすでには、私はこれを行うことができ、サーバー上のファイルを持っていますリアルタイムでエンコードされたチャンクにアクセスし、それらをクライアントに送信したい - ファイルに書き込む。

inbound_stream.pipe(encoder).pipe(newReadStream); 

     newReadStream.on('data', function(buffer){ 
      io.sockets.emit('audio', { buffer: buffer }); 
     }); 

私は二重で見て、ストリームを変換しましたが、率直に言って、私はまだ学んでいるとプロトタイピングは、私の頭のスピンをした:

私が欲しいのは事実上、これです。

どうすればよいですか?ありがとう。 @Nazar Sakharenkoから以下

UPDATE

ソリューションは、確かに私が望んでいたが、ライブエンコーディングのオーバーヘッドが非常にエンコードされたMP3を書き込み、プリバッファリング、このinpossibleを作るように見えるだけのようです(提案のために様々な人々のおかげで)

しかし、私はまだこのアプローチに問題があります。ここに新しい質問:

node.js - create a new ReadStream for a new file, when that file reaches a certain size

答えて

0

ドキュメントreadable.pipe(destination[, options])によると、宛先がstream.Writableでなければなりません。

const Writable = require('stream').Writable; 

var buffer = []; 
//in bytes 
const CHUNK_SIZE = 102400; //100kb 

const myWritable = new Writable({ 
    write(chunk, encoding, callback) { 
    buffer += chunk; 
    if(buffer.length >= CHUNK_SIZE) { 
     io.sockets.emit('audio', { buffer: buffer}); 
     buffer = []; 
    } 

    callback(); 
    } 
}); 

myWritable.on('finish',() => { 
    //emit final part if there is data to emit 
    if(buffer.length) { 
     io.sockets.emit('audio', { buffer: buffer}); 
    } 
}); 


inbound_stream.pipe(encoder).pipe(myWritable); 

thatsのすべて:あなたは何ができるか

は、あなた自身の書き込み可能なストリームを実装することです。

+0

ありがとうございます。本当にありがとうございます。 これはうまくいきましたが、残念ながらエンコードがストリームを詰まらせ、リアルタイムでは使用できません。私は、ファイルを書き込んだり、いったんgrow-fileを使用して特定のサイズに達すると、それをストリーミングしたほうがよいのだろうかと思います。 – user3174541

+0

私はmp3ストリーミングに精通していません。おそらく、最小サイズがデコードされた後、メモリ内のmp3のデコードされた一部をプリキャッシュしてストリーミングを開始することができます。 –

+0

ワークフローについて説明できますか? –

関連する問題