Camera Panel
The Camera panel displays live H264 video streams from RTSP cameras using hardware-accelerated WebCodecs decoding.
Overview
| Property | Value |
|---|---|
| Input | CompressedImage (H264) |
| Topic Pattern | 0/camera%{name}%compressed/** |
| Decoder | WebCodecs VideoDecoder |
| Display | Canvas element |
Features
- Hardware-accelerated decoding via WebCodecs API
- Live statistics — FPS, frame count, resolution
- Metadata panel — Timestamps, latency, sequence numbers
- Maximize view — Full-screen camera display
- Auto keyframe sync — Waits for keyframe before decoding
Adding a Camera Panel
From Topic Discovery
- Click Add Camera
- Click the edit icon on the new panel
- Select a camera topic from the dropdown
- Click Save
Manual Entry
- Click Add Camera
- Click the edit icon
- Enter the topic pattern:
0/camera%front_door%compressed/** - Click Save
Panel Interface
Video Display
The main area shows the decoded video stream on a canvas element.
Status Bar
The status bar shows:
| Stat | Description |
|---|---|
| FPS | Current frames per second (smoothed) |
| frames | Total frames received |
| res | Video resolution (e.g., 1920×1080) |
| Status | LIVE (decoding) or INIT (waiting) |
Controls
| Control | Icon | Description |
|---|---|---|
| Edit | Pencil | Configure topic |
| Info | Circle-i | Show/hide metadata |
| Maximize | Expand | Full-screen view |
| Remove | X | Delete panel |
Metadata Panel
Click the info icon to show detailed metadata:
| Field | Description |
|---|---|
| Format | Video codec (h264) |
| Data Size | Frame size in bytes |
| Sequence | Frame sequence number |
| Frame ID | Camera identifier |
| Acq Time | Acquisition timestamp (ns) |
| Pub Time | Publication timestamp (ns) |
| Latency | Acquisition to publication delay |
Decoding Pipeline
flowchart LR
subgraph WebSocket
msg[Protobuf Message]
end
subgraph Browser
decode[Protobuf Decode]
webcodecs[WebCodecs Decoder]
frame[VideoFrame]
canvas[Canvas Render]
end
msg --> decode
decode --> webcodecs
webcodecs --> frame
frame --> canvas
Keyframe Handling
H264 decoding requires an initial keyframe (I-frame):
- Panel displays "Waiting for keyframe..."
- First keyframe arrives with SPS/PPS headers
- Decoder initializes with codec configuration
- Subsequent frames (P-frames, B-frames) decoded
WebCodecs Configuration
The decoder is configured based on the H264 stream:
const config: VideoDecoderConfig = {
codec: "avc1.640028", // H264 High Profile
codedWidth: 1920,
codedHeight: 1080,
hardwareAcceleration: "prefer-hardware"
};
Performance
Expected FPS
| Source | Typical FPS |
|---|---|
| RTSP main stream | 25-30 fps |
| RTSP sub stream | 15-25 fps |
| WiFi camera | 10-20 fps |
Latency
End-to-end latency (camera to display):
| Component | Typical Latency |
|---|---|
| Camera encoding | 30-100ms |
| Network + GStreamer | 100-300ms |
| WebSocket + Decode | 20-50ms |
| Total | 150-450ms |
Resource Usage
| Resource | Usage |
|---|---|
| CPU | Low (hardware decode) |
| GPU | Moderate (decode + render) |
| Memory | ~50-100MB per camera |
Troubleshooting
"Waiting for keyframe"
- Wait a few seconds for the next keyframe
- Check that camera is streaming (see
pixi run cameraslogs) - Verify H264 format (not H265/HEVC)
Low FPS
- Check network bandwidth
- Use sub-stream instead of main stream
- Reduce number of simultaneous cameras
Decoder error
- Refresh the browser
- Check browser console for codec errors
- Verify stream is valid H264
Black screen
- Verify camera is connected
- Check topic is correct
- Look for errors in browser console
High latency
- Reduce
latencyin camera config - Use wired network connection
- Check for network congestion
Browser Support
| Browser | WebCodecs | H264 HW Decode |
|---|---|---|
| Chrome 94+ | Yes | Yes |
| Edge 94+ | Yes | Yes |
| Safari 16.4+ | Yes | Yes |
| Firefox | No | No |
Configuration
Topic Pattern
Camera topics use the format:
Examples:
| Camera Name | Topic Pattern |
|---|---|
front_door |
0/camera%front_door%compressed/** |
backyard |
0/camera%backyard%compressed/** |
entrance |
0/camera%entrance%compressed/** |
Wildcard Subscription
To subscribe to all cameras:
Next Steps
- RTSP Camera — Camera configuration
- Camera API — Message format
- Dashboard Overview — Other panel types