簡體   English   中英

重新開始寫入流nodejs

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM