【问题标题】:Is it possible to change MediaRecorder's stream?是否可以更改 MediaRecorder 的流?
【发布时间】:2019-09-13 06:21:29
【问题描述】:
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 并使用 addTrackremoveTrack 方法来更改流轨道但没有成功(当我尝试使用更新的流恢复它时记录器停止)

有什么想法吗?

【问题讨论】:

    标签: web-audio-api mediarecorder


    【解决方案1】:

    简短的回答是不,这是不可能的。 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

    【讨论】:

    • chrisguttandin,我也在做同样的事情,但遇到了问题,我也尝试对音轨应用约束,但是当我看到音频约束的设置时它没有显示任何音频变化更改,如果您有任何想法如何实现这一点,请告诉我
    • 我不确定为什么这是相关的,但是如果无法应用约束,通常应该拒绝 applyConstraints() 返回的承诺。也许在没有发生浏览器错误时提交浏览器错误是个好主意。
    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 2016-09-22
    • 1970-01-01
    • 2012-02-16
    • 2017-10-12
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多