1

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

我试图制作新曲目,但我不知道如何在旅途中切换曲目。我知道这在以前是不可能的,但现在想知道这是否可能?

4

3 回答 3

1

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

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

请参阅replaceTrack()Mozilla 源中的测试:https ://developer.mozilla.org/en-US/docs/Web/API/RTCRtpSender/replaceTrack

于 2015-03-13T00:38:33.470 回答
1

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

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

StreamTrack 的 readyState 正在更改为已结束,就在播放流之前 (MediaStream - MediaStreamTrack - WebRTC)

于 2017-06-16T04:09:43.590 回答
0

当您想更改为不同的设备时,您是否尝试过调用 getUserMedia()?

媒体捕获和流规范中有一个 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

于 2013-08-12T10:25:44.137 回答