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.track
至null
和 transceiver.direction
至recvonly
(需要协商)。因此,发送者可以使用
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/