onremovestream
已被弃用(并从 Firefox 中删除),而onremovetrack
尚未在 Firefox 中实现。
如何检测何时在 Firefox 中删除流或轨道?
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
事件触发。
这是一个适用于所有浏览器的示例。
在标准 WebRTC(“统一计划”)中,我们transceiver.receiver.track
不是ended
在这种情况下发生的,因为它连接到对方的transceiver.sender
,而不是对方的transceiver.sender.track
。
我们的接收轨道不是结束,而是muted
从它的流中移除。
这是因为pc.removeTrack(sender)
只设置sender.track
tonull
和transceiver.direction
to recvonly
(需要协商)。
发送者因此可以使用sender.replaceTrack(newTrack)
和transceiver.direction = "sendrecv"
再次设置来恢复发送数据。在这种情况下,我们receiver.track
将unmuted
再次被重新插入流中,触发addtrack
流上的事件。这也会track
再次触发事件。探索本博客互动部分中的所有活动。
接收轨道仅真正ended
通过transceiver.stop()
(本地或通过协商),或pc.close()
。