-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Description
Description
I am trying to use FreeSWITCH with a WebRTC client (React Native + JsSIP + react-native-webrtc).
- SIP registration over WebSocket works correctly
- User shows as registered in
sofia status profile internal reg - But calls fail during media negotiation with errors like:
INCOMPATIBLE_DESTINATION
488 Not Acceptable Here
no suitable candidates found
Incompatible SDP
DTLS handshake starts but never completes
So signaling is fine, but media (ICE/DTLS/RTP) always fails.
Environment
- FreeSWITCH: 1.10.12-release
- OS: Ubuntu
- Transport: SIP over WebSocket (ws)
- Client: React Native + JsSIP 3.11.1 + react-native-webrtc
- Network: Both server and client in same private network (10.10.4.x)
What Works
-
SIP registration works:
User: [email protected] Status: Registered(WS-NAT) Agent: JsSIP 3.11.1 -
Incoming INVITE reaches FreeSWITCH
-
Dialplan matches correctly
-
Call enters
Pre-Answerstate
What Fails
During call setup, logs show:
Activating Audio ICE
Activating RTP audio ICE: ...
Activate RTP/RTCP audio DTLS client
Changing audio DTLS state from OFF to HANDSHAKE
...
no suitable candidates found
Hangup ... cause: INCOMPATIBLE_DESTINATION
Or sometimes:
488 Not Acceptable Here
Reason: INCOMPATIBLE_DESTINATION
So FreeSWITCH cannot accept the WebRTC SDP / ICE candidates.
SIP Profile Configuration (internal.xml)
<param name="webrtc" value="true"/>
<param name="rtcp-mux" value="true"/>
<param name="disable-ice" value="true"/> <!-- also tried false -->
<param name="inbound-late-negotiation" value="true"/>
<param name="ext-sip-ip" value="$${external_sip_ip}"/>
<param name="ext-rtp-ip" value="$${external_rtp_ip}"/>vars.xml
<X-PRE-PROCESS cmd="set" data="domain=10.10.4.104"/>
<X-PRE-PROCESS cmd="set" data="external_sip_ip=10.10.4.104"/>
<X-PRE-PROCESS cmd="set" data="external_rtp_ip=10.10.4.104"/>Client SDP Characteristics
-
Uses WebRTC with DTLS-SRTP
-
Codecs offered: OPUS, PCMU, PCMA
-
rtcp-mux enabled
-
Tried both:
- With STUN servers
- Without any ICE servers
What I Tried
- Correct external IP in vars.xml
- Opened RTP ports 16384–32768 UDP
- Enabled WebRTC params in SIP profile
- Disabled ICE for testing
- Removed STUN from client
- Forced codecs (OPUS, PCMU, PCMA)
- Restarted profile and server multiple times
But media negotiation still fails with INCOMPATIBLE_DESTINATION.
Question
What exact SIP profile / media configuration is required in FreeSWITCH 1.10.x to properly accept WebRTC (JsSIP) SDP with DTLS-SRTP?
Is there any missing parameter for:
- DTLS
- SRTP
- ICE
- Candidate ACL
- NAT handling
that could cause this consistent “no suitable candidates” / “incompatible destination” error?
Any guidance or minimal working WebRTC profile example for 1.10.x would be very helpful.
Thanks in advance.