Low-latency Reolink camera streaming and integrated controls in the standard Home Assistant interface.
Reolink camera <-> Baichuan <-> go2rtc <-> WebRTC <-> Home Assistant
This community project extends the standard Home Assistant camera dialog with fast live video, stream quality selection, multi-lens support, PTZ, zoom, floodlight control and two-way audio. It uses the entities created by the official Reolink integration and does not add a separate dashboard or Lovelace card.
Author and maintainer: Bartosz Supcziński — bartek@env.pl
Home Assistant exposes advanced Reolink functions as separate entities. Its standard camera dialog does not combine them into one camera-oriented interface, and the normal RTSP/HLS path can add startup delay. This project routes the native Baichuan stream through go2rtc and augments the existing dialog without replacing the Reolink integration.
The same camera dialog adapts to portrait, landscape and full-screen layouts. The image below shows the normal mobile view and the full-screen landscape view.

sub and main streams.contain sizing to preserve the complete frame.The current release targets Home Assistant Core 2026.8.x installed as a Python service. Home Assistant OS, Container and supervised installations are not installation targets because this project installs a host systemd service and a custom go2rtc binary.
The frontend module uses internal Home Assistant web components, and the backend integration extends an internal go2rtc provider method. A Home Assistant frontend or Core update can therefore require a compatibility update even when the public camera entities remain unchanged.
The official Reolink integration must expose the main, sub, PTZ, zoom
and light entities supported by the camera. Functions unavailable on a
particular model are omitted from the dialog.
The supported build uses:
fzurita/go2rtc;78de4806a929e2bd77d7acad07e337ef53c09fd2;092ae6e2eca3afb3f439ecbd69a99785c816d953.scripts/build-go2rtc.sh reproduces this build. Revision
e8952ef99d91fe10c85836934c5ecd28b37ff7fa is not used because it can stop
some 4K H.265 streams after the first frame.
homeassistant user;127.0.0.1:1984.127.0.0.1:8554.go2rtc user with systemd
hardening.Remote access still uses the authenticated Home Assistant connection on port
| Path | Purpose |
|---|---|
custom_components/reolink_baichuan_stream/ |
Home Assistant backend integration |
frontend/reolink-webrtc-first.js |
Camera dialog and stream handling |
config/go2rtc.yaml.example |
Private go2rtc API, RTSP and WebRTC listeners |
systemd/go2rtc.service |
Hardened host service |
scripts/build-go2rtc.sh |
Reproducible go2rtc build |
scripts/install.sh |
Installation of project files |
docs/images/ |
Public README images |
Add every camera through the official Reolink integration and confirm that the standard camera entities work before installing this project.
git clone https://github.com/supczinskib/reolink-baichuan-ha.git
cd reolink-baichuan-ha
./scripts/build-go2rtc.sh
sudo install -m 0755 go2rtc /usr/local/bin/go2rtc
Create the service account if it does not exist:
id go2rtc >/dev/null 2>&1 || sudo useradd --system --home /var/lib/go2rtc --create-home --shell /usr/sbin/nologin go2rtc
Install the configuration:
sudo install -d -o go2rtc -g go2rtc -m 0700 /var/lib/go2rtc
sudo install -o go2rtc -g go2rtc -m 0600 config/go2rtc.yaml.example /var/lib/go2rtc/go2rtc.yaml
Edit /var/lib/go2rtc/go2rtc.yaml and replace 192.0.2.10 with the LAN
address of the Home Assistant host.
sudo ./scripts/install.sh
The default Home Assistant configuration directory is
/var/lib/homeassistant. Set HA_CONFIG when a different directory is
used:
sudo HA_CONFIG=/path/to/homeassistant ./scripts/install.sh
Add the following entries to configuration.yaml:
frontend:
extra_module_url:
- /local/reolink-webrtc-first.js?v=1.0.0
stream:
ll_hls: true
segment_duration: 2
part_duration: 0.2
go2rtc:
url: http://127.0.0.1:1984
reolink_baichuan_stream:
Merge the frontend section with an existing section instead of creating a
second key.
sudo systemctl daemon-reload
sudo systemctl enable --now go2rtc.service
sudo systemctl restart home-assistant.service
Confirm that both services are active:
systemctl is-active go2rtc.service home-assistant.service
In Settings → Devices & services → Entities, enable the Reolink
main and sub camera entities. The sub cameras may remain hidden
from automatically generated area views; the frontend module still uses them
for LO video and thumbnails.
Open each camera from an area view and verify:
LO is the default profile and uses less bandwidth. The LO/HI button switches
between the camera’s sub and main entities. The stream transition keeps
the last frame visible until the new profile produces video.
The zoom slider updates visually while it is moved and sends one command after release. On TrackMix, the range up to about 2.5× uses the wide view, the camera then switches to its fixed-focal-length telephoto lens, and further enlargement up to 6× is digital. Returning to the monitor point also resets local digital zoom for a wide lens.
The speaker button enables sound from the camera. The microphone button asks the browser for microphone permission and opens the talkback channel. Closing the camera dialog closes media sessions.
git pull --ff-only
sudo ./scripts/install.sh
sudo systemctl restart home-assistant.service
Rebuild and reinstall go2rtc only when the pinned commits in
scripts/build-go2rtc.sh change.
After a Home Assistant update, verify video startup, LO/HI switching, audio, PTZ, zoom, thumbnails, full screen and back navigation.
go2rtc.service is active.http://127.0.0.1:1984 is reachable from the Home Assistant
host.main and sub camera entities are enabled.journalctl -u go2rtc.service and the Home Assistant log.The frontend automatically selects HLS in an incompatible embedded browser. An HLS picture has higher latency but should remain functional. Test in Safari or Chrome to distinguish a client limitation from a camera or go2rtc problem.
sub stream is enabled.Confirm that the official Reolink integration exposes the corresponding button, number, switch or light entity. Hidden entities can be used; disabled entities cannot.
Reload the page without cache. If the problem remains, compare the installed Home Assistant version with the supported version above. A frontend structure or internal provider change can require a project update.
reolink_baichuan_stream:, the go2rtc: entry and
/local/reolink-webrtc-first.js from configuration.yaml.go2rtc.service./var/lib/homeassistant/custom_components/reolink_baichuan_stream/;/var/lib/homeassistant/www/reolink-webrtc-first.js;/etc/systemd/system/go2rtc.service;/usr/local/bin/go2rtc;/var/lib/go2rtc/.sudo systemctl disable --now go2rtc.service
sudo systemctl daemon-reload
sudo systemctl restart home-assistant.service
The official Reolink integration and its entities remain available.
Copyright (C) 2026 Bartosz Supcziński.
This project is licensed under the MIT License. See LICENSE.
When reporting a problem, include the Home Assistant version, browser or application version, camera model, firmware version and relevant sanitized logs. Remove passwords, tokens, camera addresses and network identifiers.
This is an independent community project and is not an official Reolink, go2rtc or Home Assistant product.