Skip to content

Latest commit

 

History

History

README.md

LiveKit Python SDK Examples

This directory contains examples demonstrating various features of the LiveKit Python SDK.

Prerequisites

Set the following environment variables:

export LIVEKIT_URL=ws://localhost:7880
export LIVEKIT_API_KEY=devkey
export LIVEKIT_API_SECRET=secret

Examples Overview

Example Description
basic_room.py Room connection with PlatformAudio and synthetic audio modes
room_example.py Basic room connection and event handling
api.py Room management via LiveKit API
e2ee.py End-to-end encryption demo
rpc.py Remote Procedure Call between participants
multiple_connections.py Sequential connections for sync frameworks
participant_attributes.py Dynamic participant attributes
publish_wave.py Publish sine wave audio
publish_hue.py Publish color-cycling video
play_audio_stream.py Play received audio with sounddevice
webhook.py Webhook event handling
agent_dispatch.py Manual agent dispatch

Subdirectories

Directory Description
face_landmark/ Facial landmark detection using MediaPipe
video-stream/ Video/audio sync with AVSynchronizer
data_tracks/ Data channel examples
data-streams/ Data streaming examples
local_audio/ Local audio capture with dB metering

basic_room.py

The most comprehensive example, demonstrating room connection with audio capabilities. It showcases two audio capture modes that can be used independently or combined.

Quick Start

# List available audio devices
python basic_room.py --list-devices

# Connect with PlatformAudio (recommended)
python basic_room.py --platform-audio --room my-room

# Connect with specific devices
python basic_room.py --platform-audio --mic-id "device-guid" --speaker-id "device-guid"

# Publish a WAV file
python basic_room.py --file audio.wav --room my-room

# Mix microphone + WAV file (both modes together)
python basic_room.py --platform-audio --file background.wav --room my-room

Audio Modes

PlatformAudio Mode (--platform-audio)

Uses WebRTC's Audio Device Module (ADM) for microphone capture. Recommended for most applications.

Features:

  • Built-in voice processing:
    • Echo Cancellation (AEC) - removes echo from speaker playback
    • Noise Suppression (NS) - reduces background noise
    • Auto Gain Control (AGC) - normalizes audio levels
  • Hardware-accelerated processing on supported platforms (e.g., iOS VPIO)
  • Automatic speaker playout for received audio
  • Device enumeration and selection
  • No external audio libraries required

Limitations:

  • No direct access to raw audio frames (ADM sends directly to WebRTC)
  • Cannot apply custom audio processing before publishing
platform_audio = rtc.PlatformAudio()
source = platform_audio.create_audio_source(
    rtc.PlatformAudioOptions(
        echo_cancellation=True,
        noise_suppression=True,
        auto_gain_control=True,
    )
)
track = rtc.LocalAudioTrack.create_audio_track("microphone", source)

Synthetic Mode (Default)

Manual control over audio frames via AudioSource.capture_frame(). Use this for custom audio processing or programmatic audio generation.

Features:

  • Full control over audio data
  • Access to raw audio frames for custom processing
  • Generate synthetic audio (files, TTS, audio synthesis)
  • Apply custom filters, effects, or ML models

Limitations:

  • No built-in AEC/NS/AGC - implement yourself or use AudioProcessingModule
  • Must handle speaker playout manually via AudioStream
  • Requires external audio libraries for mic capture (sounddevice, pyaudio)
source = rtc.AudioSource(sample_rate=48000, num_channels=1)
track = rtc.LocalAudioTrack.create_audio_track("audio", source)

frame = rtc.AudioFrame(data=audio_bytes, sample_rate=48000, ...)
await source.capture_frame(frame)

Mixing Both Modes

PlatformAudio and Synthetic modes can run simultaneously. The --file option demonstrates this by publishing a WAV file (synthetic) alongside microphone capture (PlatformAudio).

python basic_room.py --platform-audio --file music.wav --room my-room

This creates two audio tracks:

  1. Microphone - via PlatformAudio with voice processing
  2. File - via synthetic mode from WAV

Use cases: background music while speaking, sound effects, mixing pre-recorded audio with live input.

Command Line Options

Option Description
--list-devices List available audio devices and exit
--platform-audio Use PlatformAudio for microphone (recommended)
--file WAV_PATH Publish audio from WAV file (synthetic mode)
--room NAME Room name (default: my-room)
--mic-id ID Select microphone by device ID
--speaker-id ID Select speaker by device ID

When to Use Each Mode

Use Case Mode
Voice/video calls PlatformAudio
Conferencing apps PlatformAudio
Playing audio files Synthetic
Text-to-speech Synthetic
Custom audio processing Synthetic
ML audio effects Synthetic
Background music + voice Both

local_audio/

Examples for local audio capture with microphone and speaker management.

full_duplex.py

Full-duplex audio with microphone capture and speaker playout.

cd local_audio
python full_duplex.py

Features:

  • Microphone capture via MediaDevices
  • Speaker playout for received audio
  • Real-time dB level metering

publish_mic.py

Publish microphone audio with dB level monitoring.

cd local_audio
python publish_mic.py

Features:

  • Microphone capture with AEC enabled
  • Real-time dB level visualization

room_example.py

Basic room connection demonstrating event handling and participant tracking.

python room_example.py

api.py

Room management using the LiveKit API (create rooms, list rooms).

python api.py

e2ee.py

End-to-end encryption with a rotating 3D cube visualization.

python e2ee.py

rpc.py

Remote Procedure Call (RPC) between participants - greetings, math operations, timeout handling.

python rpc.py

multiple_connections.py

Sequential room connections in a single thread. Useful for Django/Flask integration.

python multiple_connections.py

participant_attributes.py

Set, update, and delete participant attributes dynamically.

python participant_attributes.py

publish_wave.py

Publish a sine wave audio track at a specified frequency.

python publish_wave.py

publish_hue.py

Publish a color-cycling animated video track.

python publish_hue.py

play_audio_stream.py

Play incoming audio from remote participants using sounddevice.

pip install sounddevice
python play_audio_stream.py

webhook.py

Handle LiveKit webhook events using aiohttp.

python webhook.py

agent_dispatch.py

Manually dispatch agents to rooms (instead of automatic dispatch).

python agent_dispatch.py