0

我尝试做一个简单的 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触发另一个对等点的正确方法是什么?

4

1 回答 1

2

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

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

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

例子

let senders = pc.getSenders()

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

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

pc.close()

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

选择

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

更多信息

于 2021-02-08T22:34:35.523 回答