4

I have a basic webRTC application that supports video/audio communication and file sharing between two peers, The app runs as intended when I open it on Mozilla Firefox but when I run it on Google Chrome the onicecandidate returns null

My RTCPeerConnection

        myConnection = new RTCPeerConnection();

Setting up the peer connection

myConnection.createOffer().then(offer => {
    currentoffer = offer
    myConnection.setLocalDescription(offer);
})
    .then(function () {
        myConnection.onicecandidate = function (event) {
            console.log(event.candidate);

            if (event.candidate) {
                send({
                    type: "candidate",
                    candidate: event.candidate
                });
            }
        };
        send({
            type: "offer",
            offer: currentoffer
        });
    })
    .catch(function (reason) {
        alert("Problem with creating offer. " + reason);
    });

On Mozilla Firefox you can see in the console log all the ICE candidates that are collected on each "onicecandidate" event

Firefox output

On Chrome the output is null Chrome output

1
  • I ran into the same issue, did you find a solution? Commented Oct 24, 2021 at 4:42

2 Answers 2

8

You should pass options object when calling createOffer() method, e.g.:

myConnection = new RTCPeerConnection();

var mediaConstraints = {
    'offerToReceiveAudio': true,
    'offerToReceiveVideo': true    
};

myConnection.createOffer(mediaConstraints).then(offer => {
        currentoffer = offer
        myConnection.setLocalDescription(offer);
    })
    ...// the rest of you code goes here    

Alternatively, you can specify RTCRtpTransceiver before creating an offer:

myConnection = new RTCPeerConnection();

myConnection.addTransceiver("audio");
myConnection.addTransceiver("video");

myConnection.createOffer().then(offer => {
        currentoffer = offer
        myConnection.setLocalDescription(offer);
    })
    ...// the rest of you code goes here 

Sources:
WebRTC 1.0
MDN RTCPeerConnection.createOffer()
MDN RTCPeerConnection.addTransceiver()
Example -- GitHub

0
0

You have to pass STUN/TURN servers when create a peer connection.

Otherwise you will only local candidates and hence will be able to connect locally only

var STUN = {
    'url': 'stun:stun.l.google.com:19302',
};

var iceServers = 
{
    iceServers: [STUN]
};

var pc = new RTCPeerConnection(iceServers);
1
  • 3
    Yes I understand, but I use my application locally over LAN and I do not need to utilize a STUN server. Commented Apr 10, 2019 at 17:53

Not the answer you're looking for? Browse other questions tagged or ask your own question.