[onremovestream
已被弃用(并从Firefox中删除),而onremovetrack
尚未在Firefox中实现。
如何检测何时在Firefox中删除流或音轨?
您在接收方流]上使用onremovetrack
:
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(“统一计划”)中,发生这种情况时,我们的example不是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()
。