我试着做了一个简单的WebRTC p2p视频聊天浏览器应用。我设置了一个信号服务器,让两个对等点执行所有的SDP和ICE握手。我的一些代码片段:
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
}
}当一个对等体完成后,我会执行以下操作:
pc.stop();我只需关闭RTCPeerConnection即可。但我没有看到在另一个对等体上触发onremovetrack。
关闭对等项的正确方法是什么,以便通知另一个对等项并触发onremovetrack?
发布于 2021-02-09 06:34:36
我认为您应该使用RTCPeerConnection.removeTrack()方法,它将在另一端触发MediaStream.onremovetrack事件。
要获取连接的轨迹,请使用RTCPeerConnection.getSenders()方法。
RTCPeerConnection方法getSenders()返回一个RTCRtpSender对象数组,每个对象代表负责传输一个轨道的数据的RTP发送方。
示例
let senders = pc.getSenders()
senders.forEach((sender) => {
pc.removeTrack(sender)
})这将从连接中删除所有曲目。有一种实验方法可以完全关闭连接,RTCPeerConnection.close(),检查compatibility table。在删除轨道后使用它,这样您将获得onremovetrack事件:
pc.close()调用此方法的
将终止RTCPeerConnection的ICE代理,并终止任何正在进行的ICE处理和任何活动流。
替代
另一种方法是立即调用close()方法,并在另一端侦听RTCPeerConnection.onconnectionstatechange事件,检查example。
更多信息
getSenders() methodremoveTrack() methodonremovetrack event handlerclose() methodonconnectionstatechange事件处理程序https://stackoverflow.com/questions/66096280
复制相似问题