私はいくつかのMP3データをファイルに書き込むために、ラメパッケージ[1]を使用しています。データはソケット上の生のオーディオとして送信され、受け取ったときにファイルストリームに書き込まれ、10分ごとに新しいファイルに書き込まれます。私が直面している問題は、これが長時間実行されると、ファイルが閉じられていないため、ファイルハンドルが不足しているということです。このようなもの:書き込みが完了したらファイルを閉じる方法は?
var stream;
var encoder = lame.Encoder({
// Input
channels: 2,
bitDepth: 16,
sampleRate: 44100,
// Output
bitRate: 128,
outSampleRate: 22050,
mode: lame.STEREO // STEREO (default), JOINTSTEREO, DUALCHANNEL or MONO
});
encoder.on('data', function(data) {
stream.write(data);
});
var server = net.createServer(function(socket) {
socket.on('data', function(data) {
// There is some logic here that will based on time if it's
// time to create a new file. When creating a new file it uses
// the following code.
stream = fs.createWriteStream(filename);
// This will write data through the encoder into the file.
encoder.write(data);
// Can't close the file here since it might try to write after
// it's closed.
});
});
server.listen(port, host);
ただし、最後のデータチャンクが書き込まれた後にファイルを閉じるにはどうすればよいですか?技術的には、新しいファイルを開くことができますが、前のファイルは最後のチャンクを書き終える必要があります。
このシナリオでは、ファイルを正しく閉じるにはどうすればよいですか?
は、[1] https://www.npmjs.com/package/lame
"データ" は何ですか?読み取り可能なストリームまたはバッファ – KibGzr
@KibGzrこれは 'Buffer'です。 – Luke