9

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

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

4

1 回答 1

10

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事件触发。

这是一个适用于所有浏览器的示例。

要记住的事情

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

我们的接收轨道不是结束,而是muted从它的流中移除。

这是因为pc.removeTrack(sender)只设置sender.tracktonulltransceiver.directionto recvonly(需要协商)。

发送者因此可以使用sender.replaceTrack(newTrack)transceiver.direction = "sendrecv"再次设置来恢复发送数据。在这种情况下,我们receiver.trackunmuted再次被重新插入流中,触发addtrack流上的事件。这也会track再次触发事件。探索本博客互动部分中的所有活动。

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

于 2020-03-26T03:24:33.910 回答