WebRTC:如何使用RTCPeerConnection.removeTrack()删除视频或音频或同时删除这两者?

时间:2018-10-09 06:53:37

标签: javascript webrtc

我正在研究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仍然会跟踪。 我在这里还是其他地方做错了吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

首先,您需要获取对等方的流。您可以使用enabled的{​​{1}}属性来静音/隐藏流。使用下面的代码片段切换媒体。

MediaStreamTrack

答案 1 :(得分:0)

const senders = pc.getSenders();
senders.forEach((sender) => pc.removeTrack(sender));
newTracks.forEach((tr) => pc.addTrack(tr));

获取所有发件人;

环回并删除每个发送轨道;

添加新曲目(如果需要);

编辑:或者,如果不需要重新协商(下面列出的条件),请使用replaceTrackhttps://developer.mozilla.org/en-US/docs/Web/API/RTCRtpSender/replaceTrack)。

  

并非所有曲目替换都需要重新协商。实际上,即使   无需协商即可完成看似巨大的更改。这里   是可以触发谈判的变化:

     
      
  • 新轨道的分辨率超出了   当前轨迹的边界;也就是说,新轨道要么更宽,要么   比目前的高。

  •   
  • 新曲目的帧频足够高   导致超出编解码器的阻塞率。新的曲目是   视频轨道及其原始或预编码状态与   原始轨道。

  •   
  • 新轨道是具有不同音轨的音频轨道   原始频道数。

  •   
  • 内置媒体源   编码器(例如硬件编码器)可能无法提供   协商编解码器。软件源可能未实现协商的   编解码器。

  •