Skip to main content

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, or custom;
  • 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:

StateMeaning
LiveA recent frame, selected writer, and healthy output are available.
Warming upThe source or publisher is starting. A short black frame period can be normal.
No pipelineNo active pipeline is feeding this transmission. Reconcile or check the source publication.
StaleThe last selected frame is too old. The image should not be treated as live.
Publisher downFrames exist, but the media publisher is not running for the selected output.
OfflineThe 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.

TransportBest useLatency
HLSMost stable browser, app, and Home Assistant ingress playbackHigher
MSESmooth web playback when the browser and sidecar support itLower than HLS
WebRTCExplicit low-latency or PTZ interactionLowest
JSMpegLast visual fallback when better transports failMedium

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.