javascript - WebRTC:如何在 Firefox 中检测流或轨道何时从 PeerConnection 中删除?

标签 javascript stream webrtc peer-connection

onremovestream已弃用(并从 Firefox 中删除),而 onremovetrack尚未在 Firefox 中实现。

如何检测何时在 Firefox 中删除流或轨道?

最佳答案

您使用 onremovetrack 在接收流上:

pc.ontrack = ({track, streams: [stream]}) => {
  track.onunmute = () => {
    if (!video.srcObject) video.srcObject = stream;
  };
  stream.onremovetrack = ({track}) => {
    console.log(`${track.kind} track was removed.`);
    if (!stream.getTracks().length) {
      console.log(`stream ${stream.id} emptied (effectively removed).`);
    }
  };
};

以上ontrack将在例如时运行另一方添加一个轨道(并协商):
const sender = pc.addTrack(track, stream);

现在,只要对方调用pc.removeTrack(sender)或设置transceiver.direction = "recvonly" (并协商),您应该看到 removetrack事件火。

这是 example这应该适用于所有浏览器。

要记住的事情

在标准 WebRTC(“统一计划”)中,我们的 transceiver.receiver.track不是 ended发生这种情况时,因为它连接到对方的transceiver.sender ,而不是对方的transceiver.sender.track .

我们的接收轨道不是结束,而是 muted并从其流中删除。

这是因为 pc.removeTrack(sender)只设置sender.tracknulltransceiver.directionrecvonly (需要协商)。

因此,发送者可以使用sender.replaceTrack(newTrack) 继续发送数据。和设置transceiver.direction = "sendrecv"再次。在这种情况下,我们的receiver.track将是 unmuted再次并重新插入到流中,触发 addtrack流上的事件。这也会触发 track再次事件。探索所有事件in this blog的互动部分。

接收轨道只是真正的ended通过 transceiver.stop() (本地或通过协商),或pc.close() .

关于javascript - WebRTC:如何在 Firefox 中检测流或轨道何时从 PeerConnection 中删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60636439/

相关文章:

webrtc - 在WebRTC中识别在线用户

javascript - 将数据从数据库返回到 Controller

javascript - 使用 Shadow DOM 将工具栏插入页面

stream - 写流协议(protocol) : Message size field or Message delimiter?

ruby - 如何在 ruby​​ 中执行 TOS/DSCP?

javascript - 在 Node Js 中,如何写入从视频上传的文件 block

google-chrome - Chrome 上的 getUserMedia 经常无法返回最佳分辨率

javascript - 对调用函数的每个变量进行空检查?

javascript - Chrome 扩展内容脚本

c# - 将流转换为WMA