现在由于设备枚举存在于 chrome 中,我知道我可以在“getUserMedia”协商期间选择一个设备。我还想知道是否可以在通话过程中切换设备(排队本地音轨并切换音轨,或者我是否必须重新协商流)?我不确定这是否仍然被阻止或现在是“允许的”
我试图制作新曲目,但我不知道如何在旅途中切换曲目。我知道这在以前是不可能的,但现在想知道这是否可能?
现在由于设备枚举存在于 chrome 中,我知道我可以在“getUserMedia”协商期间选择一个设备。我还想知道是否可以在通话过程中切换设备(排队本地音轨并切换音轨,或者我是否必须重新协商流)?我不确定这是否仍然被阻止或现在是“允许的”
我试图制作新曲目,但我不知道如何在旅途中切换曲目。我知道这在以前是不可能的,但现在想知道这是否可能?
在 Firefox 中,您可以使用 RTPSender 对象调用replaceTrack()
以动态替换轨道(无需重新协商)。作为规范的一部分,这最终应该被其他浏览器支持。
如果没有replaceTrack()
,您可以删除旧流,添加新流,处理 onnegotiationnedded,并让客户端处理流中的更改。
请参阅replaceTrack()
Mozilla 源中的测试:https ://developer.mozilla.org/en-US/docs/Web/API/RTCRtpSender/replaceTrack
即使我有同样的要求。我必须使用 MediaRecorder 录制视频。为此,我使用带有音频和视频约束的 navigator.getUserMedia。您可以通过从 navigator.mediaDevices.enumerateDevices() 获取可用设备并将相应设备附加到约束并再次使用新约束调用 navigator.getUserMedia 来动态传递视频或音频轨道。这样做时要注意的一点是,您必须使用 track.stop() 方法终止现有轨道。
你可以在这里看到我的例子。
StreamTrack 的 readyState 正在更改为已结束,就在播放流之前 (MediaStream - MediaStreamTrack - WebRTC)
当您想更改为不同的设备时,您是否尝试过调用 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