我已经使用react-native-webrtc实现了基于WebRTC的视频通话。它是一对一的调用,并且工作正常,但是当我断开呼叫并尝试重新连接时,重新连接会花费很多时间,有时会挂起应用程序。下面是断开连接的代码:
function stopLocalStream() {
if (friends != null) {
friends.forEach(friend => {
leave(friend.socketId)
})
}
if (localStream != null) {
localStream.getTracks().forEach(t => t.stop())
localStream.release()
localStream = null
}
}
function leave(socketId) {
console.log('leave', socketId)
var pc = peerConnections[socketId]
if (pc) {
pc.close()
}
delete peerConnections[socketId]
if (onFriendLeftCallback != null) {
onFriendLeftCallback(socketId)
}
}
我认为我没有正确断开视频通话。任何帮助将不胜感激。
答案 0 :(得分:2)
如果您想要真正的关机,我建议您先停止收发器,以便发送RTCP BYE:
pc.getTransceivers().forEach((transceiver) => {
transceiver.stop();
});
这应该彻底停止远程方收到的媒体轨道:
https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpTransceiver/stop
注意:您可能需要在关闭RTCPeerConnection之前花一些时间,以便该BYE有时间实际发送(尝试setTimeout
)。
关于为什么无法重新启动另一个呼叫,如果不进一步了解您的代码如何管理它,很难回答。