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.1.0-py3-none-win_amd64.whl (2.6 MB view details)

Uploaded Python 3Windows x86-64

baresdk-2.1.0-py3-none-manylinux_2_34_x86_64.whl (2.0 MB view details)

Uploaded Python 3manylinux: glibc 2.34+ x86-64

File details

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

File metadata

  • Download URL: baresdk-2.1.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 2.6 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.1.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 b6ded3a09bc4d2131ea1e0779e49125d6b65c45dafb6240ab8704f5263a191d3
MD5 40ec9b30c785a387f8ed71886a128eff
BLAKE2b-256 972a4dbeca05c4be93349e2ff12b2db9f09fdd9b01a58916237dc94073b2b3c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for baresdk-2.1.0-py3-none-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 fc03ba2d6ae13d3bb67eca4416c6122671a840ac8d6f58433435215f0b9ae3b7
MD5 fd1268a538ba587fc5b6d717588f4a1f
BLAKE2b-256 560e9d031b01ff1de0b7c48b52d13d1c8dba6d6a24d51a0e2a63a05c1e826836

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