私のアプリは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
ありがとうございます。本当にありがとうございます。 これはうまくいきましたが、残念ながらエンコードがストリームを詰まらせ、リアルタイムでは使用できません。私は、ファイルを書き込んだり、いったんgrow-fileを使用して特定のサイズに達すると、それをストリーミングしたほうがよいのだろうかと思います。 – user3174541
私はmp3ストリーミングに精通していません。おそらく、最小サイズがデコードされた後、メモリ内のmp3のデコードされた一部をプリキャッシュしてストリーミングを開始することができます。 –
ワークフローについて説明できますか? –