Skip to main content

Python binding for baresdk — SIP/WebRTC/NAT SDK

Project description

baresdk

Python bindings for a thread-safe SIP/RTP library. Built on baresip + libre.

pip install baresdk

Features

Category
Transport UDP · TCP · TLS · WS · WSS
Crypto SRTP-SDES · DTLS-SRTP
NAT ICE · STUN · TURN
Calls Invite · Answer · Hangup · Hold/Resume · DTMF · Blind/Attended transfer
Messaging SIP MESSAGE · Presence · BLF · MWI
Audio AEC · NS · AGC · gain · mute · device hot-switch · PCM tap · WAV recording
Stats RTCP/MOS · jitter · bandwidth · SIP trace · pcap
Multi-account ✓ — unlimited accounts per stack
Thread-safe ✓ — call any API from any thread

Requirements

Linux — two runtime libraries required:

sudo apt install libssl3 libpulse0                    # Ubuntu/Debian
sudo dnf install openssl-libs pulseaudio-libs         # Fedora/RHEL
sudo pacman -S openssl libpulse                       # Arch

import baresdk prints the exact install command if either is missing.
libwebrtc-audio-processing-1 is optional — enables AEC_WEBRTC full-duplex mode; the SDK works without it.

Windows — only the Visual C++ Redistributable 2015–2022 required. OpenSSL, zlib, and opus are statically embedded.

Quick start

import baresdk as sdk

# Receive calls
sdk.configure(log_level=1)
acc = sdk.create_account("alice@pbx.example.com", "secret")
acc.register()

@sdk.on("incoming_call")
def _(ev):
    ev.call.answer()

@sdk.on("ended")
def _(ev):
    sdk.stop()

sdk.run()
# Make a call
sdk.configure(log_level=1)
acc = sdk.create_account("alice@pbx.example.com", "secret")
acc.register()

@sdk.on("registered")
def _(ev):
    sdk.call("bob@pbx.example.com")

@sdk.on("ended")
def _(ev):
    sdk.stop()

sdk.run()

WSS + DTLS-SRTP + ICE:

sdk.configure(verify_server=True)
acc = sdk.create_account("alice@pbx.example.com", "secret",
    transport="wss", server_url="wss://pbx.example.com/ws",
    media_enc="dtls_srtp", ice_enabled=True,
    stun_server="stun:stun.l.google.com:19302")

Audio

sdk.set_aec(True)
sdk.set_ns(True)
sdk.set_agc(True)
sdk.set_mic_gain(6.0)       # dB, range −20 to +20
sdk.set_speaker_gain(-3.0)
sdk.set_jitter_buffer(20, 200)
AEC mode Quality Requires
Suppressor (default, mode=1) Half-duplex nothing
WebRTC (mode=2) Full-duplex libwebrtc-audio-processing-1
# WebRTC full-duplex AEC — configure before first account (desktop only, opt-in build)
sdk.configure(aec_mode=2)   # 2 = WEBRTC; requires cmake -DBARESDK_WITH_WEBRTC_AEC=ON

sdk.create_account parameters

Parameter Type Example
transport str "udp" "tcp" "tls" "ws" "wss"
media_enc str "none" "sdes" "dtls_srtp"
ice_enabled bool
stun_server str "stun:stun.l.google.com:19302"
turn_server str "turn:turn.example.com:3478"
server_url str WebSocket URL — overrides host/port
audio_codecs list[str] ["opus", "ulaw", "alaw"]
extra_headers dict Added to every REGISTER/INVITE

sdk.configure() accepts global options (applies before first account):

Key Example
log_level 03
stats_interval_ms 5000
verify_server False to skip TLS verification
transport "wss"

Events — @sdk.on(name) names

Name When Sub-names (also available)
reg_state Registration changed registering · registered · unregistered · reg_failed
incoming_call INVITE received
call_state Call changed calling · ringing · established · held · ended · cancelled · call_failed
dtmf Digit received
media_stats Periodic RTCP/MOS report
transfer_request REFER received
message SIP MESSAGE received
presence_state Buddy presence changed
mwi Voicemail notification
quality_alert MOS/loss/jitter/RTT threshold crossed
sip_trace Raw SIP message (enable with trace_sip=True)
* Every event (wildcard)
@sdk.on("registered")
def _(ev):
    print("registered!")

@sdk.on("incoming_call")
def _(ev):
    print(f"call from {ev.from_uri}")
    ev.call.answer()

@sdk.on("media_stats")
def _(ev):
    print(f"MOS={ev.mos_lq:.2f}  RTT={ev.rtt_ms:.0f}ms  loss={ev.loss_pct:.1f}%")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

baresdk-2.0.0-py3-none-win_amd64.whl (3.5 MB view details)

Uploaded Python 3Windows x86-64

baresdk-2.0.0-py3-none-manylinux_2_34_x86_64.whl (1.0 MB view details)

Uploaded Python 3manylinux: glibc 2.34+ x86-64

File details

Details for the file baresdk-2.0.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: baresdk-2.0.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 3.5 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for baresdk-2.0.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 df846549241ffed41a4b81187d9a35533f155155e91c53a0861f3c251a1e1a46
MD5 649d48acd8bed221120836e52105a25e
BLAKE2b-256 2dbd95a6124c1b8076514ea517fb4052e9c8b339c834bf8fd28781c16937adec

See more details on using hashes here.

File details

Details for the file baresdk-2.0.0-py3-none-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for baresdk-2.0.0-py3-none-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 12b97318f5ea57be7f4fa6be4a9665ca89927c91e0cdbaebd27717ee6e5a030f
MD5 9c6bfe2e880119a7fe519ebbcb96e81d
BLAKE2b-256 78e8e21a1b4a4ccc28b734c021bf5612cfc0cdbbbd05045c1df7da6155a0b344

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page