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