WebRTC Examples

A collection of WebRTC examples with Node.js and Dart signaling servers

View the Project on GitHub sjhorn/webrtc_examples

WebRTC Examples

A collection of WebRTC examples demonstrating various features and patterns, with both Node.js and Dart signaling servers.

Examples

Example Description
Basic Peer Connection Simple peer-to-peer video call between two browsers
Audio Only Audio-only WebRTC connection without video
Video Only Video-only WebRTC connection without audio
Audio + Video (Bundled) Audio and video on a single transport (BUNDLE)
Audio + Video (Unbundled) Audio and video on separate transports
Audio/Video Capture Capture and display local audio/video streams
Screen Sharing Share screen content via WebRTC
Speech to Text Stream audio to server for real-time speech-to-text
DataChannel (TCP-like) Reliable, ordered data channel messaging
DataChannel (UDP-like) Unreliable, unordered data channel for real-time data
Renegotiation Add/remove tracks mid-call without disconnecting
Network Interruptions Handle connection state changes and recovery
Multi-Peer Multiple peers sending audio to a central receiver
Stats Dashboard Real-time WebRTC metrics: bitrate, FPS, RTT, packet loss

Running Examples

Each example can be run with either Node.js or Dart server:

# Using Node.js server
cd example_name
./run.sh

# Using Dart server
cd example_name
./run.sh dart

Requirements

npm install

Basic Peer Connection

Directory: basic_peer/

Simple peer-to-peer video call between two browsers

Basic Peer Connection

cd basic_peer
./run.sh dart

Audio Only

Directory: audio_only/

Audio-only WebRTC connection without video

Audio Only

cd audio_only
./run.sh dart

Video Only

Directory: video_only/

Video-only WebRTC connection without audio

Video Only

cd video_only
./run.sh dart

Audio + Video (Bundled)

Directory: audio_video_bundled/

Audio and video on a single transport (BUNDLE)

Audio + Video (Bundled)

cd audio_video_bundled
./run.sh dart

Audio + Video (Unbundled)

Directory: audio_video_unbundled/

Audio and video on separate transports

Audio + Video (Unbundled)

cd audio_video_unbundled
./run.sh dart

Audio/Video Capture

Directory: audio_video_capture/

Capture and display local audio/video streams

Audio/Video Capture

cd audio_video_capture
./run.sh dart

Screen Sharing

Directory: screen_sharing/

Share screen content via WebRTC

Screen Sharing

cd screen_sharing
./run.sh dart

DataChannel (TCP-like)

Directory: data_channel_tcp/

Reliable, ordered data channel messaging

DataChannel (TCP-like)

cd data_channel_tcp
./run.sh dart

DataChannel (UDP-like)

Directory: data_channel_udp/

Unreliable, unordered data channel for real-time data

DataChannel (UDP-like)

cd data_channel_udp
./run.sh dart

Renegotiation

Directory: renegotiation/

Add/remove tracks mid-call without disconnecting

Renegotiation

cd renegotiation
./run.sh dart

Network Interruptions

Directory: network_interruptions/

Handle connection state changes and recovery

Network Interruptions

cd network_interruptions
./run.sh dart

Multi-Peer

Directory: multi_peer/

Multiple peers sending audio to a central receiver

Multi-Peer

cd multi_peer
./run.sh dart

Speech to Text

Directory: speech_to_text/

Stream audio from multiple browser clients to server for real-time speech-to-text transcription using Whisper

Speech to Text

cd speech_to_text
./run.sh dart

Stats Dashboard

Directory: stats_dashboard/

Real-time WebRTC metrics: bitrate, FPS, RTT, packet loss

Stats Dashboard

cd stats_dashboard
./run.sh dart

Acknowledgments

Audio and video samples used in these examples are borrowed from:

License

MIT