[英]Restart writing to a stream nodejs
我有一個設置為通過http錄制實時流音頻的應用程序。 我正在做一些音頻處理,然后將生成的音頻記錄到文件中。 錄制30秒后,我想停止錄制並保存文件(然后上傳)。 當我需要再開始錄制30秒時,我會繼續處理音頻以尋找下一個點。 我遇到的問題是,在我第一次停止錄制后,當我想第二次開始錄制時一直出現錯誤。
錯誤是: Error: write after end
我想這與行encoder.end()
我還能如何停止錄音,但是以后又可以重新開始錄音?
var encoder = new lame.Encoder({ // input channels: 1, // 2 channels (left and right) bitDepth: 16, // 16-bit samples sampleRate: 44100, // 44,100 Hz sample rate // output bitRate: 128, outSampleRate: 22050, mode: lame.MONO // STEREO (default), JOINTSTEREO, DUALCHANNEL or MONO }); var recordingDecoder; module.exports.startRecording = function(decoder) { if(isRecording) return false; recordingDecoder = decoder; isRecording = true; recordingDecoder.pipe(encoder); var writeStream = fs.createWriteStream('../recorded_calls/currentCall.wav'); encoder.pipe(writeStream); } module.exports.stopRecording = function() { if(isRecording) { console.log('stop recording', encoder) encoder.end(); isRecording = false; } }
編輯:添加了unripe()
,然后刪除了文件。
module.exports.stopRecording = function() { if(isRecording) { console.log('stop recording') recordingDecoder.unpipe(encoder); isRecording = false; } }
編輯:基於具有多個編碼器的建議,我將要在startRecording
函數中創建的編碼器移到了位,然后在完成記錄后將其設置為false。
var encoder; var recordingDecoder; module.exports.startRecording = function(decoder) { encoder = new lame.Encoder({ // input channels: 1, // 2 channels (left and right) bitDepth: 16, // 16-bit samples sampleRate: 44100, // 44,100 Hz sample rate // output bitRate: 128, outSampleRate: 22050, mode: lame.MONO // STEREO (default), JOINTSTEREO, DUALCHANNEL or MONO }); console.log('strat recording') if(isRecording) return false; recordingDecoder = decoder; isRecording = true; recordingDecoder.pipe(encoder); var writeStream = fs.createWriteStream('../recorded_calls/currentCall.wav'); encoder.pipe(writeStream); } module.exports.stopRecording = function() { if(isRecording) { console.log('stop recording') recordingDecoder.unpipe(encoder); isRecording = false; encoder = false; } }
終止位於管道中間的流就像在水軟管中間關閉閥門一樣,這將在水仍在流動或該流仍在為數據提供服務時在閥門上產生壓力。 相反,您想從編碼器中unpipe
記錄的pipe
,然后可以在以后再次pipe
它。 如果較長時間取消管道傳輸,則完全關閉流並在下次使用時重新創建它可能是有益的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.