WebRTC:在firefox中重新协商
据介绍,firefox v38中实现了重新协商,我们可以从相同的对等连接中添加或删除流,而无需创建新的对等连接,但我找不到任何工作演示来支持这一说法,当我尝试时,两个用户在视频模式下聊天,我将其中一个流更改为WebRTC:在firefox中重新协商,firefox,webrtc,Firefox,Webrtc,据介绍,firefox v38中实现了重新协商,我们可以从相同的对等连接中添加或删除流,而无需创建新的对等连接,但我找不到任何工作演示来支持这一说法,当我尝试时,两个用户在视频模式下聊天,我将其中一个流更改为音频,我发现错误: NotSupportedError:尚未实现removeStream 说明相同,但说明支持重新协商事件,但removeStream不是重新协商的关键部分吗?我在Windows7中使用firefox版本39。我很困惑,firefox还不支持重新协商,对吗?尝试对单个曲目使用
音频
,我发现错误:
NotSupportedError:尚未实现removeStream
说明相同,但说明支持重新协商事件,但
removeStream
不是重新协商的关键部分吗?我在Windows7中使用firefox版本39。我很困惑,firefox还不支持重新协商,对吗?尝试对单个曲目使用replaceTrack
,而不是替换整个流。本例假设您有一个对等连接pc1
,并有一个新的流newStream
在其上进行替换。获取发送者,并用新流中的适当曲目替换曲目。工作样本
还请注意,从您的第一个链接:
function screenShare() {
let screenConstraints = {video: {mediaSource: "screen"}};
navigator.mediaDevices.getUserMedia(screenConstraints)
.then(stream) {
stream.getTracks().forEach(track) {
screenStream = stream;
screenSenders.push(pc1.addTrack(track, stream));
});
});
}
注意,这个示例调用了pc1.addTrack
而不是pc1.addStream
与此相反,用于卸下-pc1.卸下支架
:
function stopScreenShare() {
screenStream.stop();
screenSenders.forEach(sender) {
pc1.removeTrack(sender);
});
}
Firefox支持重新协商
Firefox从未实施过removeStream
,因为在实施重新协商时,Firefox已更改为addTrack
和removeTrack
(有些人认为其删除过于仓促,因此可能会再次出现)addStream
仍然可以向后兼容,因为Firefox已经支持它了
请注意,removeTrack
容易混淆地获取从addTrack
返回的数据,因此API不是一个插入
polyfill的外观如下所示:
mozRTCPeerConnection.prototype.removeStream = function(stream) {
this.getSenders().forEach(sender =>
stream.getTracks().includes(sender.track) && this.removeTrack(sender));
}
移动到曲目是为了给用户更大的灵活性,因为曲目可能属于多个流,并且一个流中的所有曲目都不需要通过PeerConnection(或同一PeerConnection)发送
有关在Firefox中工作的重新协商示例,请参见此
mozRTCPeerConnection.prototype.removeStream = function(stream) {
this.getSenders().forEach(sender =>
stream.getTracks().includes(sender.track) && this.removeTrack(sender));
}