bot 1.0.11

A bot for the videocall project
bot-1.0.11 is not a library.

Videocall Synthetic Client Bot

Enhanced bot that streams synthetic audio and video to videocall-rs for load testing and scale validation.

Features

  • WebTransport Client: Connects using WebTransport instead of WebSocket
  • Audio Streaming: Loops WAV files and encodes to Opus (50fps, 20ms packets)
  • Video Streaming: Cycles through JPEG images and sends mock video packets (30fps)
  • Per-Client Configuration: Individual audio/video settings per client
  • Linear Ramp-up: Configurable delay between client starts
  • Multi-Client Support: Run multiple synthetic clients per container

Configuration

Option 1: YAML Configuration File (Recommended)

Create a config.yaml file:

ramp_up_delay_ms: 1000
server_url: "https://webtransport-us-east.webtransport.video"
clients:
  - user_id: "bot001"
    meeting_id: "test-room"
    enable_audio: true
    enable_video: false
  - user_id: "bot002"
    meeting_id: "test-room"
    enable_audio: false
    enable_video: true

Then run:

BOT_CONFIG_PATH=config.yaml cargo run

Option 2: Environment Variables (Backwards Compatible)

N_CLIENTS=3
SERVER_URL="https://webtransport-us-east.webtransport.video"
ROOM="test-room"
CLIENT_0_ENABLE_AUDIO=true
CLIENT_0_ENABLE_VIDEO=false
CLIENT_1_ENABLE_AUDIO=false  
CLIENT_1_ENABLE_VIDEO=true
CLIENT_2_ENABLE_AUDIO=true
CLIENT_2_ENABLE_VIDEO=true
cargo run

Assets

The bot includes pre-loaded media assets:

  • Audio: BundyBests2.wav - Looped and encoded to Opus
  • Video: output_120.jpg to output_124.jpg - Cycled as mock video frames

Usage Examples

Test Audio-Only Clients

BOT_CONFIG_PATH=config.yaml RUST_LOG=info cargo run

Quick 10-Client Test

N_CLIENTS=10 ROOM="load-test" cargo run

Docker Build

docker build -t videocall-synthetic-client .

Media Protocol

  • Audio: 50fps (20ms Opus packets) following neteq_player.rs pattern
  • Video: 30fps (~33ms packets) with mock VP9 data
  • Transport: WebTransport unidirectional streams
  • Format: videocall-types protobuf MediaPacket

TODO

  • Add proper VP9 encoding (currently sends mock data)
  • Add Helm chart for Kubernetes deployment
  • Add metrics collection and Prometheus export
  • Add graceful shutdown handling
  • Add configurable test duration

Development

Compile and check:

cargo check
cargo clippy
cargo test

Run with debug logging:

RUST_LOG=debug cargo run