我正在研究WebRTC,并尝试弄清它的工作原理。
我在WebRTC.github.io上修改了this sample,使getUserMedia成为leftVideo的源并将其流传输到rightVideo。它有效。
我想添加一些功能,例如当我在leftVideo(我的浏览器是Chrome 69)上按暂停键时
我改变了Call()
...
stream.getTracks().forEach(track => {
pc1Senders.push(pc1.addTrack(track, stream));
});
...
并在leftVideo上添加功能
leftVideo.onpause = () => {
pc1Senders.map(sender => pc1.removeTrack(sender));
}
我不想关闭连接,我只想关闭视频或音频。
但是我暂停leftVideo之后,rightVideo仍然会跟踪。 我在这里还是其他地方做错了吗?
感谢您的帮助。
答案 0 :(得分:0)
首先,您需要获取对等方的流。您可以使用enabled
的{{1}}属性来静音/隐藏流。使用下面的代码片段切换媒体。
MediaStreamTrack
答案 1 :(得分:0)
const senders = pc.getSenders();
senders.forEach((sender) => pc.removeTrack(sender));
newTracks.forEach((tr) => pc.addTrack(tr));
获取所有发件人;
环回并删除每个发送轨道;
添加新曲目(如果需要);
编辑:或者,如果不需要重新协商(下面列出的条件),请使用replaceTrack
(https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpSender/replaceTrack)。
并非所有曲目替换都需要重新协商。实际上,即使 无需协商即可完成看似巨大的更改。这里 是可以触发谈判的变化:
新轨道的分辨率超出了 当前轨迹的边界;也就是说,新轨道要么更宽,要么 比目前的高。
新曲目的帧频足够高 导致超出编解码器的阻塞率。新的曲目是 视频轨道及其原始或预编码状态与 原始轨道。
新轨道是具有不同音轨的音频轨道 原始频道数。
内置媒体源 编码器(例如硬件编码器)可能无法提供 协商编解码器。软件源可能未实现协商的 编解码器。