正确拆除一个WebRTC RTCPeerConnection



我尝试做一个简单的WebRTC p2p视频聊天浏览器应用程序。我设置了一个信号服务器,并有两个对等体做所有的SDPICE握手。我的一些代码片段:

pc = new RTCPeerConnection(config);
pc.onicecandidate = (event) => {
...
}
pc.ontrack(event) =>{
if (event.track.kind === 'video') {
// add the stream as the srcObject of a video tag
}
event.streams[0].onremovetrack = (e) => {
// want to remove the stream from the video tag
}
}

当一个peer完成后,我做以下操作:

pc.stop();

我只是关闭RTCPeerConnection。但是我没有看到onremovetrack在另一个对等端被触发。

关闭对等体的正确方法是什么,以便可以通知另一个对等体并触发onremovetrack?

我认为你应该使用RTCPeerConnection.removeTrack()方法,它会在另一端触发MediaStream.onremovetrack事件。

使用RTCPeerConnection.getSenders()方法获取连接的轨迹。

RTCPeerConnection方法gesender()返回一个数组RTCRtpSender对象,每个对象表示RTP发送方负责传输一条轨道的数据。

let senders = pc.getSenders()
senders.forEach((sender) => {
pc.removeTrack(sender)
})

这将从连接中删除所有轨道。有一个完全关闭连接的实验方法,RTCPeerConnection.close(),查看兼容性表。在删除音轨后使用它,这样您将获得onremovetrack事件:

pc.close()

调用此方法将终止RTCPeerConnection的ICE代理,终止任何正在进行的ICE处理和任何活动流。

另一种方法是立即调用close()方法,监听另一端的RTCPeerConnection.onconnectionstatechange事件,查看示例。

更多信息

  • getSenders()method
  • removeTrack()方法
  • onremovetrack事件处理器
  • close()方法
  • onconnectionstatechange事件处理程序

相关内容

最新更新