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 baresdkprints the exact install command if either is missing.
libwebrtc-audio-processing-1is optional — enablesAEC_WEBRTCfull-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 |
0–3 |
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
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b6ded3a09bc4d2131ea1e0779e49125d6b65c45dafb6240ab8704f5263a191d3
|
|
| MD5 |
40ec9b30c785a387f8ed71886a128eff
|
|
| BLAKE2b-256 |
972a4dbeca05c4be93349e2ff12b2db9f09fdd9b01a58916237dc94073b2b3c1
|
File details
Details for the file baresdk-2.1.0-py3-none-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: baresdk-2.1.0-py3-none-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 2.0 MB
- Tags: Python 3, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc03ba2d6ae13d3bb67eca4416c6122671a840ac8d6f58433435215f0b9ae3b7
|
|
| MD5 |
fd1268a538ba587fc5b6d717588f4a1f
|
|
| BLAKE2b-256 |
560e9d031b01ff1de0b7c48b52d13d1c8dba6d6a24d51a0e2a63a05c1e826836
|