onremovestream
已被弃用(并从Firefox中删除),而Firefox中尚未实现onremovetrack
。
如何检测何时在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
事件。这也会再次触发ojit_code事件。探索所有事件in this blog的交互式部分。接收曲目仅是
track
(本地或通过协商)或ended
真正的transceiver.stop()
。关于javascript - WebRTC:如何在Firefox中检测何时从PeerConnection中删除流或轨道?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60636439/