Ich verwende das lame-Paket [1], um einige MP3-Daten in eine Datei zu schreiben. Die Daten werden als Rohaudio auf einem Socket gesendet und wenn es empfangen wird, wird es in einen Dateistrom geschrieben und alle 10 Minuten schreibe ich in eine neue Datei. Das Problem, das mir bevorsteht, ist, dass das System, wenn es für eine lange Zeit läuft, keine Dateihandles mehr hat, weil die Datei nicht geschlossen ist. Etwas wie dieses:Wie wird eine Datei beim Schreiben geschlossen?
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);
Wie kann ich jedoch die Datei schließen, nachdem der letzte Datenblock geschrieben wurde? Technisch kann eine neue Datei geöffnet werden, während die vorherige Datei noch den letzten Chunk schreiben muss.
Ist dieses Szenario, wie schließe ich die Datei korrekt?
[1] https://www.npmjs.com/package/lame
was "Daten"? Lesbarer Stream oder Puffer? – KibGzr
@KibGzr Es ist ein 'Puffer'. – Luke