WebRTC随时随地改变媒体流

时间:2013-08-10 18:32:00

标签: webrtc

现在由于设备枚举存在于chrome中,我知道我可以在“getUserMedia”协商期间选择设备。我还想知道我是否可以在通话过程中切换设备(排队本地轨道并切换轨道或者我是否必须重新协商流)?我不确定这是否仍然被阻止或现在是“允许的”

我试图制作一首新曲目,但我无法弄清楚如何在旅途中切换曲目。我知道这是以前不可能的,但现在想知道是否有可能吗?

3 个答案:

答案 0 :(得分:1)

在Firefox中,您可以使用RTPSender对象调用replaceTrack()来动态替换轨道(不进行重新协商)。作为规范的一部分,最终应该由其他浏览器支持。

如果没有replaceTrack(),您可以删除旧流,添加新流,处理onnegotiatednedded,让客户端处理流中的更改。

请参阅Mozilla源代码中的replaceTrack()测试:https://dxr.mozilla.org/mozilla-central/source/dom/media/tests/mochitest/test_peerConnection_replaceTrack.html

答案 1 :(得分:0)

当您想要更改为其他设备时,是否尝试过调用getUserMedia()?

Media Capture和Streams规范中有一个applyConstraints()方法,可以动态更改约束,但尚未实现:

dev.w3.org/2011/webrtc/editor/getusermedia.html#the-model-sources-sinks-constraints-and-states dev.w3.org/2011/webrtc/editor/getusermedia.html#methods-1

答案 2 :(得分:0)

即使我有同样的要求。我必须使用MediaRecorder录制视频。为此,我使用navigator.getUserMedia,音频和视频的约束。您可以通过从navigator.mediaDevices.enumerateDevices()获取可用设备并将相应设备附加到约束并再次使用新约束调用navigator.getUserMedia来动态传递视频或音频轨道。这样做的要点是,你必须使用track.stop()方法杀死现有的轨道。

你可以在这里看到我的例子。

StreamTrack's readyState is getting changed to ended, just before playing the stream (MediaStream - MediaStreamTrack - WebRTC)