Video & Audio
pi-webrtc reads video from a camera or a stream, encodes it, and sends it over WebRTC. This section shows which video sources you can use, how encoding works, and how to add audio.
Pages
- CSI cameras: ribbon cameras on a Raspberry Pi (libcamera) or a Jetson (libargus).
- USB cameras: any UVC camera, through V4L2.
- RTSP cameras: IP cameras, MediaMTX, GStreamer and DeepStream.
- Virtual cameras: process frames with Python or AI first, then stream them.
- Encoding: hardware and software encoding.
- Two-way audio: a microphone and a speaker on the device.
Video sources
--camera selects the video source:
| Source | --camera | Raspberry Pi | Jetson |
|---|---|---|---|
| CSI camera | libcamera:<id> | ✅ | ❌ |
| CSI camera | libargus:<id> | ❌ | ✅ |
| USB camera or other V4L2 device | v4l2:<id> | ✅ | ✅ |
| RTSP stream | rtsp://... | ✅ | ✅ |
If you ask for a source that the device does not have, pi-webrtc stops with an error. For example, libcamera:0 does not work on a Jetson.
Troubleshooting
Fixes for the most common problems. If you are still stuck, open an issue. Include the full command, the log, and your device and OS versions.
CSI Cameras
A CSI camera connects to the board with a ribbon cable. pi-webrtc reads it with libcamera on a Raspberry Pi, and with libargus on a Jetson.

