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

问题描述 投票:5回答:1

[onremovestream已被弃用(并从Firefox中删除),而onremovetrack尚未在Firefox中实现。

如何检测何时在Firefox中删除流或音轨?

javascript stream webrtc peer-connection
1个回答
2
投票

您在接收方流]上使用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()

© www.soinside.com 2019 - 2024. All rights reserved.