Insert title here

Case Studies

Bringing your idea to life and in front of billions of eyes

WebRTC issue: Error 1007: ICE negotiation failed
Learning Management Solutions (K Praveen)

I'm writing this to help those who still not figured out how to resolve this issue.
You need to perform one extra step when the server is behind NAT(network address translation).
You need to configure Kurento to use stun server, which you can get from the link kurento documentation,
you need to edit /etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini and uncomment and assign values for stunServerAddress and stunServerPort.

For example, to use the STUN server at with port 19302, edit the lines with stunServerAddress and stunServerPort as follows:


Next, this is very important

edit /opt/freeswitch/conf/sip_profiles/external.xml and ensure the value for wss-binding uses the external IP address

<param name="wss-binding" value="EXTERNAL_IP_ADDRESS:7443"/>
At this point, restart your BigBlueButton server with bbb-conf --restart, then try connecting to the WebRTC media again.

If the issue stile not resolved then edit the following files and substitute EXTERNAL_IP_ADDRESS for the external IP address (not the external hostname).

Edit /opt/freeswitch/conf/vars.xml, and
change <X-PRE-PROCESS cmd="set" data=""/>
To <X-PRE-PROCESS cmd="set" data="external_rtp_ip=EXTERNAL_IP_ADDRESS"/>

Change <X-PRE-PROCESS cmd="set" data=""/>
To <X-PRE-PROCESS cmd="set" data="external_sip_ip=EXTERNAL_IP_ADDRESS"/>

Next, edit /opt/freeswitch/conf/sip_profiles/external.xml and change
<param name="ext-rtp-ip" value="$${local_ip_v4}"/>
<param name="ext-sip-ip" value="$${local_ip_v4}"/>
<param name="ext-rtp-ip" value="$${external_rtp_ip}"/>
<param name="ext-sip-ip" value="$${external_sip_ip}"/>

Next, edit /usr/share/red5/webapps/sip/WEB-INF/, and make sure the values of and freeswitch.ip have the internal IP address.<internal_ip>


Edit /etc/bigbluebutton/nginx/sip.nginx to connect to the external IP address.

If you have configured SSL, use port 7443:

location /ws {
        proxy_pass https://EXTERNAL_IP_ADDRESS:7443;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_read_timeout 6h;
        proxy_send_timeout 6h;
        client_body_timeout 6h;
        send_timeout 6h;

If enableListenOnly is set to true in /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml, as in

$ grep enableListenOnly /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml
    enableListenOnly: true

edit /usr/local/bigbluebutton/bbb-webrtc-sfu/config/default.yml change the value to ip to match the external IP address of the server, and the value of sip_ip to match the internal IP address of the server (where FreeSWITCH is listening to port 5066). For example, if the servers external IP address is and the internal IP address is then edit default.yml and change the values for ip and sip_ip as follows:

    port: 5066

After making the above changes, restart BigBlueButton.

$ bbb-conf --restart


external ip->public ip

internal ip->private ip


please check it your firewall settings too

ICE negotiation failure means that a UDP connection couldn't be set up. There are a couple of different causes and they mostly lead to an improper configuration. The three most common causes are:
1. Both the client and server are under NAT
2. The server is behind a firewall that is rejecting UDP packets
3. The client is behind a firewall that is rejecting UDP packets

As a server administrator, you can only really control the first two. For problem 1, if your server is behind NAT "you need to forward UDP ports 16384 - 32768". For problem 2, you need to allow UDP packets through your firewall.


Tech Divinity cloud enable faster performance