Dan*_*ari 8 javascript stream webrtc peer-connection
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).`);
}
};
};
Run Code Online (Sandbox Code Playgroud)
ontrack当例如另一方添加轨道(并协商)时,上面将运行:
const sender = pc.addTrack(track, stream);
Run Code Online (Sandbox Code Playgroud)
现在,每当另一方呼叫pc.removeTrack(sender)或设置transceiver.direction = "recvonly"(并协商)时,您应该看到removetrack事件触发。
这是一个适用于所有浏览器的示例。
在标准 WebRTC(“统一计划”)中,发生这种情况时我们transceiver.receiver.track不是ended,因为它连接到transceiver.sender另一方的transceiver.sender.track.
我们的接收轨道没有结束,而是muted从其流中移除。
这是因为pc.removeTrack(sender)只设置sender.tracktonull和transceiver.directionto recvonly(需要协商)。
发送方因此可以再次使用sender.replaceTrack(newTrack)和设置来恢复发送数据transceiver.direction = "sendrecv"。在这种情况下,我们receiver.track将unmuted再次插入到流中,触发addtrack流上的事件。这也会track再次触发该事件。在此博客的互动部分探索所有事件。
一个接收轨道只有真正ended通过transceiver.stop()(本地或通过协商),或pc.close()。