Live viewing
Live viewing is the normal way to see camera sources and rendered pipeline outputs in Toposync.
For camera sources, the expected flow is simple: enable live viewing on the source, choose the source role, and let Toposync create the transmission and implicit pipeline.
Publish a source
In camera settings, enable Transmit this source for each video source you want to view.
Each published source should have:
- a visible name;
- a role:
main,sub,zoom, orcustom; - a working image or stream source;
- an implicit pipeline generated by Toposync.
If a camera has multiple streams, publish the useful ones separately. For
example, publish the low-resolution stream as sub and the high-resolution
stream as main.
Variants
A live view can have variants. The viewer selects the best variant for the current context:
- grid and thumbnails prefer
sub; - fullscreen prefers
main; - PTZ or autotrack can prefer
zoom; - advanced or rendered outputs can use
custom.
The user-facing selector should show names like Main, Low resolution, Zoom, or your custom label. Technical output ids and engine paths are advanced diagnostics.
Playback states
Common states:
| State | Meaning |
|---|---|
| Live | A recent frame, selected writer, and healthy output are available. |
| Warming up | The source or publisher is starting. A short black frame period can be normal. |
| No pipeline | No active pipeline is feeding this transmission. Reconcile or check the source publication. |
| Stale | The last selected frame is too old. The image should not be treated as live. |
| Publisher down | Frames exist, but the media publisher is not running for the selected output. |
| Offline | The camera/source is unreachable or no fresh frame is available. |
A running process is not enough to call a stream live. Toposync should only show live when real fresh frames are available.
Transports
Toposync can use several transports. You usually leave the mode on Auto.
| Transport | Best use | Latency |
|---|---|---|
| HLS | Most stable browser, app, and Home Assistant ingress playback | Higher |
| MSE | Smooth web playback when the browser and sidecar support it | Lower than HLS |
| WebRTC | Explicit low-latency or PTZ interaction | Lowest |
| JSMpeg | Last visual fallback when better transports fail | Medium |
HLS is the stable baseline. MSE can be preferred in web dashboards when available. WebRTC should not be treated as the default for every tile. JSMpeg is video-only and low quality by design.
RTSP is not a browser transport. It is useful for Home Assistant Core, diagnostics, VLC, Frigate, or other external tools.
Debug one transport
The stream debug page can open one fixed transport at a time. Use it when you need to know whether HLS, MSE, WebRTC, or JSMpeg is failing independently.
The debug page should not silently switch transport. Some transports are expected to fail in some environments.
Troubleshooting
The camera shows no image
Check that the camera snapshot works, then check that the source is published. If the live view says No pipeline, reconcile the publication or save the camera source again so Toposync can recreate the implicit pipeline.
It starts black and then works
A short warmup can be normal while the camera source, publisher, playlist, or sidecar starts. It should settle into Live. If it stays black, open the debug page for the active transport.
HLS works but WebRTC warns
If the active transport is HLS or MSE and the video is live, a WebRTC warning is usually only a low-latency warning. It matters when you explicitly request WebRTC, PTZ, or low latency.
Home Assistant ingress
Inside the Home Assistant add-on sidebar or ingress, expect HLS-first playback. Direct browser WebRTC is sensitive to add-on port mapping and network path. For Home Assistant Cloud, prefer the native Home Assistant camera integration rather than direct WebRTC inside the Toposync iframe.