A Raspberry Pi with a camera module, streaming to the laptop behind it

Ultra-low latency streaming for embedded devices

Board to Browser

WebRTC from Raspberry Pi and NVIDIA Jetson to any browser. 100-200 ms glass-to-glass over WiFi, LTE, or 5G.

Glass-to-glass on LAN
Sub-100 ms
Hardware encoding
H.264 / AV1
Pluggable signaling
MQTT · WHEP · SFU
Open source
Apache-2.0

01

Features

Hardware Encoding

V4L2 M2M on Raspberry Pi for H.264, and NVIDIA hardware encoding on Jetson for H.264 / AV1.

Two Way Communication

WebRTC DataChannels carry control messages, and the IPC bridge hands them to any process on the device.

Pluggable Signaling

MQTT, WHEP and LiveKit share one interface, and more than one can run at a time.

Works over 4G / 5G

WebRTC provides NAT traversal, congestion control and packet-loss recovery for reliable operation over cellular networks.

Sub-stream
Record at full resolution while streaming a downscaled copy.
Recording
MP4 files and periodic JPEGs, continuous or triggered over a DataChannel.
IPC bridge
Relay a DataChannel to a Unix socket so local processes talk to the browser.
Adaptive scaling
Resolution drops under network or device pressure, and recovers.
Camera controls
rpicam-apps compatible — autofocus, AWB, exposure, denoise.
Audio
48 kHz capture through PulseAudio or ALSA.
STUN / TURN
Built in, for NAT traversal on cellular and carrier networks.
YAML config
Every CLI flag also works as a key in a config file.

02

Use Cases

robotics

Robotics & Drones

Sub-second video off a robot or drone, so an operator can drive it remotely without fighting the delay.

doorbell camera

Remote Monitoring

Reach a camera behind NAT over peer-to-peer signaling, or fan it out to a crowd through an SFU.

industrial

Industrial & Lab Inspection

Watch a machine or a bench setup live from the browser, with a recorded copy kept on the device.

outdoor field camera

Field Devices

One board captures, encodes and speaks WebRTC — no ground station or relay host in the loop.

See it running

Web-Controlled Drone

Gamepad input over a DataChannel, video back over WebRTC — all on WiFi.

On-device Object Tracking

Real-time YOLOv11 + NvDCF running on a Jetson Orin NX.

One Camera, Many Viewers

The board uploads a single stream and a LiveKit SFU fans it out.

03

Signaling

Pick how the device is reached. More than one transport can run at the same time.

webrtc mqtt signaling

MQTT

Needs: An MQTT broker

Peer-to-peer viewing from anywhere. The device needs no public hostname — any broker brokers the handshake.

webrtc whep signaling

WHEP

Needs: No extra server — a LAN IP is enough

The device serves the endpoint itself, so the stream plays from a plain URL in any WHEP player, including Home Assistant.

webrtc sfu signaling

SFU

Needs: A LiveKit server, or a Cloudflare Realtime app

Many simultaneous viewers. The device uploads one stream and the SFU fans it out, so viewer count stops being its problem.

With an SFU the board uploads once and any number of viewers can watch and send control messages back over a DataChannel.
Local devices talk to the board over a Unix socket and V4L2; the board publishes to an SFU, which relays to every viewer, in about 200 ms end to end.

04

Why pi-webrtc

The camera board is the WebRTC endpoint. There is no gateway in the media path.

What that buys you: one less always-on host to deploy, secure and scale. Nothing transcodes or re-streams in between, so the delay stays close to the network round-trip rather than stacking up per hop. Control travels back over a DataChannel on the same connection, so there is no second path to operate. And the same binary covers both shapes — peer-to-peer for a single viewer, an SFU when you need many.

TraditionalRTSP camera + gatewayA separate always-on host sits in the media path — one more thing to run, secure and scale.
A traditional RTSP camera needs a gateway or media server between it and the browser, adding 500 ms to 2 s of delay.
pi-webrtcThe board is the endpointThe board encodes once and speaks WebRTC itself — straight to a viewer, or into an SFU to fan out.
pi-webrtc encodes on the board and speaks WebRTC itself: one stream straight to a browser, one to one, or into an SFU that fans it out to many viewers.

05

Hardware Support

One codebase, two platforms.

Raspberry Pi *

Camera backend
libcamera
Hardware encoding
H.264

NVIDIA Jetson *

Camera backend
libargus
Hardware encoding
H.264 / AV1

* Pi 5 and Jetson Nano have no hardware encoder and fall back to software encoding. USB cameras are supported through V4L2 on both platforms.