Skip to content

WebRTC call fails with INCOMPATIBLE_DESTINATION / 488 Not Acceptable Here (ICE/DTLS candidate issue) #2976

@harikrishnanev-afk

Description

@harikrishnanev-afk

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-Answer state


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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions