是否可以更改MediaRecorder的流?

时间:2019-09-08 00:11:49

标签: web-audio-api mediarecorder

getUserMedia(constrains).then(stream => {
    var recorder = new MediaRecorder(stream)
})

recorder.start()
recorder.pause()
// get new stream getUserMedia(constrains_new)
// how to update recorder stream here?
recorder.resume()

有可能吗?我尝试创建MediaStream并使用 addTrack removeTrack 方法来更改流轨道,但没有成功(当我尝试使用更新的流恢复它时,记录器停止)

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

简短的回答是“否”,这是不可能的。 MediaStream recording spec明确描述了此行为:https://w3c.github.io/mediacapture-record/#dom-mediarecorder-start。该算法的要点15.3表示:“如果在任何时候向流的轨道集中添加了轨道或从轨道中删除了轨道,则UA必须立即停止收集数据...”。

但是如果您只想录制音频,则可以使用AudioContext代理流。创建一个MediaStreamAudioDestinationNode并使用它提供的用于记录的流。然后,您可以将带有MediaStreamAudioSourceNodes和/或MediaStreamTrackAudioSourceNodes的流馈送到音频图中,并以您希望的任何方式将它们混合。

最后但并非最不重要的一点是,目前有计划将所需的功能添加到规范中。也许您只需要稍等一下。或者可能更长一些,具体取决于您使用的浏览器。 :-)

https://github.com/w3c/mediacapture-record/issues/167

https://github.com/w3c/mediacapture-record/pull/186