Simple-peer: Connection failed when I dial to my friend outside my network

Created on 15 Nov 2019  路  7Comments  路  Source: feross/simple-peer

I am getting the connection failed when I try to connect to my friend via the internet outside my network
but when I dial to a different network which is also outside my network everything works, so I set up my on TURN server and tested using https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
turn server works well, but why I am getting a connection failed someone please help

Frontend code 

var Peer = require('simple-peer')
let socket = io();

socket.on('connect', function() {

    function InitPeer(init=false,stream=null) {
        let peer = new Peer({initiator: init,stream:stream,trickle: false,reconnectTimer: 100,
            iceTransportPolicy: 'relay',
            config: {

                iceServers: [
                    {
                        urls: "stun:xx.ml",
                        username: "shehin",
                        credential: "shehin"
                    },
                    {
                        urls: "turn:xx.ml",
                        username: "shehin",
                        credential: "shehin"
                    }
                ]
            }});
        return peer;
    }

    function CreateVideo(stream) {
        let video = document.querySelector('video');
        video.srcObject = stream;
        video.play();
        return stream;
    }
    function InitiateBroadcaster() {

        let peers={};

        navigator.getUserMedia({video: true, audio: true}, gotMedia, (err) => {
            console.log(err);
        });

        socket.emit('broadcaster_found',{socketId:socket.io.engine.id});

        function gotMedia(stream) {
            stream = CreateVideo(stream);

            //STEP - 3
            function FrontOfferRequest(_data)
            {
                try {
                    _data = JSON.parse(_data);
                    let peer = InitPeer(true, stream);
                    peer.on('signal', data => {
                        console.log(data);
                        let _socketId = _data.socketId;
                        peers[_socketId] = peer;
                        socket.emit('back_offer', JSON.stringify({'data': data, 'socketId': _data.socketId}));
                    });
                    peer.on('connect', () => {
                        console.log('CONNECTED')
                    });
                    peer.on('error', (err) => {
                        console.log(err);
                    });

                    peer.on('close', function () {
                        peer.destroy();
                    });
                }catch (e) {
                    console.log(e);
                }
            }
            //STEP - 7
            function FrontAnswer(_data){
                try {
                    _data = JSON.parse(_data);
                    peers[_data.socketId].signal(_data.data);
                }catch (e) {
                    console.log(e);
                }
            }
            socket.on('front_offer_request',FrontOfferRequest);
            socket.on('front_answer',FrontAnswer);

        }
    }

    function InitiateReceiever() {
        // STEP - 1
        socket.emit('back_offer_request');

        let peer = new Peer();
        peer.on('signal', data => {
            console.log(data);

            socket.emit('back_answer',JSON.stringify({'data':data}));
        });
        peer.on('close', function () {
            peer.destroy();
        });
        peer.on('error', (err) => {
            console.log(err);
        });
        peer.on('stream', stream => {
            CreateVideo(stream);

        });

        // STEP - 5
        function FrontOffer(_data)
        {
            try {

                _data = JSON.parse(_data);
                peer.signal(_data.data);
            }catch (e) {
                console.log(e);
            }
        }
        socket.on('front_offer',FrontOffer);

    }
    location.hash === '#Broadcast' ? InitiateBroadcaster() : InitiateReceiever();


});

Error: Connection failed.
at makeError (bundle.js:5988)
at Peer._onConnectionStateChange (bundle.js:6625)
at RTCPeerConnection.Peer._pc.onconnectionstatechange (bundle.js:6090)

need more info

Most helpful comment

I have same issue.

All 7 comments

And something interesting happened when I connect via a VPN and act as an offerer everything works as expected, can someone help? I don't want to use VPN every time

Did you follow all the steps in https://github.com/feross/simple-peer/issues/202#issuecomment-378152065?

Particularly:

Try appending ?transport=tcp to the TURN config. You can also try configuring your TURN server to use port 443 as many firewalls will treat TCP traffic on this port as opaque SSL traffic. Lastly, you can try using TLS over TCP to encrypt traffic to the TURN server which should prevent any firewall blocking.

Also, make sure you're delivering ALL the signal events. There's going to be multiple events for ice candidates. Your socket.io event names suggest you might be expecting only an offer/answer pair.

Closing due to inactivity. Feel free to continue discussion.

I have same issue.

I have same issue too.
Too me everything works fine when I use the same network.
But when a try connect outside my network then connection failed.

same here. 馃槩

Was this page helpful?
0 / 5 - 0 ratings

Related issues

saagarbethi picture saagarbethi  路  4Comments

scriptonist picture scriptonist  路  5Comments

olgeorge picture olgeorge  路  5Comments

t-mullen picture t-mullen  路  4Comments

measwel picture measwel  路  4Comments