gpt4 book ai didi

javascript - WebRTC:如何在 Firefox 中检测流或轨道何时从 PeerConnection 中删除?

转载 作者:行者123 更新时间:2023-12-01 15:16:02 26 4
gpt4 key购买 nike

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.tracknulltransceiver.directionrecvonly (需要协商)。

因此,发送者可以使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com