如何在 react-native 中结束对等连接

How to end peer connection in react-native

我如何在使用 react-native-peerjs 时结束对等连接..连接成功&调用有效。但是在结束通话时,我还没有找到断开连接的功能,所以通话仍然在后台继续,直到我重新启动应用程序。

我的连接是这样的

 const peerServer = new Peer(undefined, {
    host: 'mvmarketserver.herokuapp.com',
    config: {
        iceServers: [
            {url:'stun:eu-turn3.xirsys.com'},
            {
                username: "",
                credential: "",
                credentialType: 'password',
                urls: [
                    "turn:eu-turn3.xirsys.com:80?transport=udp",
                    "turn:eu-turn3.xirsys.com:3478?transport=udp",
                    "turn:eu-turn3.xirsys.com:80?transport=tcp",
                    "turn:eu-turn3.xirsys.com:3478?transport=tcp",
                    "turns:eu-turn3.xirsys.com:443?transport=tcp",
                    "turns:eu-turn3.xirsys.com:5349?transport=tcp",
                ]
            }
        ]
    },
    secure: true,
    port: 443,
    path: '/mypeer'
})

peerServer.on('error', console.log)

目前我的断开连接是这样的,我尝试使用 new Peer() 看看是否创建一个新的,结束之前的 one.Please 帮助

dispatch({type: DELETE_STREAM, payload: []})
    dispatch({type: DELETE_MY_STREAM, payload: null})
    dispatch({type: DELETE_REMOTE_STREAM, payload: []})
KeepAwake.deactivate()
            SoundPlayer.stop()
            const roomID = this.state.room;
            console.log('leave ' + roomID);
            socket.emit('end-call', {roomID}); 
            const peer = new Peer();
            console.log('disconnected')
            InCallManager.stop({ busytone: '_DTMF_'})
            this.props.leaveRoom()
            const {goBack} = this.props.navigation;
            goBack(null);

这里我使用原生的 peerConnection 但也许你可以尝试这种方式。

peerServer.on('connection', conn => {
    conn.on('close', () => {
        console.log("Close PeerConnection");
        conn.close();
    });
})

但如果这不起作用,可能 conn.on('close') 没有触发。 https://github.com/peers/peerjs/issues/636

如果您使用的是 SocketIo,您可以添加 suck 事件作为

socket.broadcast.emit("user-disconnected", {SOME_DATA_WHAT_YOU_WANT_TO_SEND}); 

并且您可以在客户端中进行活动

socket.on("user-disconnected", (userId)=>{
    // Close peer connection or remove all video or audio stream
    closePeer()
});

创建 closePeer 函数

function closePeer() {
    for (let conns in peerServer.connections) {
      peerServer.connections[conns].forEach((conn, index, array) => {
        conn.peerConnection.close();
        if (conn.close)
          conn.close();
      });
    }
  }

希望对您有所帮助