Skip to content

flutter-webrtc/dart-sip-ua

Repository files navigation

dart-sip-ua

Financial Contributors on Open Collective pub package slack

A dart-lang version of the SIP UA stack, ported from JsSIP.

Overview

  • Use pure dart-lang
  • SIP over WebSocket && TCP (use real SIP in your flutter mobile, desktop, web apps)
  • Audio/video calls (flutter-webrtc) and instant messaging
  • Support with standard SIP servers such as OpenSIPS, Kamailio, Asterisk, 3CX and FreeSWITCH.
  • Support RFC2833 or INFO to send DTMF.

Currently supported platforms

  • iOS
  • Android
  • Web
  • macOS
  • Windows
  • Linux
  • Fuchsia

Install

Android

  • Proguard rules:
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }

-keep class com.cloudwebrtc.webrtc.** {*;}
-keep class org.webrtc.** {*;}

Quickstart

Run example:

Register with SIP server:

  • Asterisk
  • FreeSWITCH
  • OpenSIPS
  • 3CX
  • Kamailio
  • or add your server example.

FAQ's OR ISSUES

expand

Server not configured for DTLS/SRTP

WEBRTC_SET_REMOTE_DESCRIPTION_ERROR: Failed to set remote offer sdp: Called with SDP without DTLS fingerprint.

Your server is not sending a DTLS fingerprint inside the SDP when inviting the sip_ua client to start a call.

WebRTC uses encryption by Default, all WebRTC communications (audio, video, and data) are encrypted using DTLS and SRTP, ensuring secure communication. Your PBX must be configured to use DTLS/SRTP when calling sip_ua.

Why isn't there a UDP connection option?

This package uses a WS or TCP connection for the signalling processs to initiate or terminate a session (sip messages). Once the session is connected WebRTC transmits the actual media (audio/video) over UDP.

If anyone actually still wants to use UDP for the signalling process, feel free to submit a PR with the large amount of work needed to set it up, packet order checking, error checking, reliability timeouts, flow control, security etc etc.

SIP/2.0 488 Not acceptable here

The codecs on your PBX server don't match the codecs used by WebRTC

  • opus (payload type 111, 48kHz, 2 channels)
  • red (payload type 63, 48kHz, 2 channels)
  • G722 (payload type 9, 8kHz, 1 channel)
  • ILBC (payload type 102, 8kHz, 1 channel)
  • PCMU (payload type 0, 8kHz, 1 channel)
  • PCMA (payload type 8, 8kHz, 1 channel)
  • CN (payload type 13, 8kHz, 1 channel)
  • telephone-event (payload type 110, 48kHz, 1 channel for wideband, 8000Hz, 1 channel for narrowband)

NOTE

Thanks to the original authors of JsSIP for providing the JS version, which makes it possible to port the dart-lang.

Sponsors

The first version was sponsored by Suretec Systems Ltd. T/A SureVoIP.

Contributing

The project is inseparable from the contributors of the community.

License

dart-sip-ua is released under the MIT license.