WE

WebRTC Camera

Low-latency camera streaming integration for Home Assistant

Video Surveillance ★ 2.2k stars Medium setup MIT

WebRTC Camera is a Home Assistant custom integration that streams RTSP and other camera feeds with minimal latency using WebRTC and the embedded go2rtc engine. It enables near-instant viewing of self-hosted IP cameras.

Key features

  • Sub-second camera streaming
  • WebRTC and go2rtc based
  • RTSP and ONVIF support
  • Home Assistant Lovelace card

Pros & cons

Strengths

  • Very low latency
  • Local and private

Trade-offs

  • Requires Home Assistant
  • Integration, not standalone

WebRTC Camera replaces

Last reviewed Sep 13, 2026 · 852 words

Home Assistant's stock camera cards show an RTSP feed with 5 to 15 seconds of delay, because the built-in pipeline transcodes to HLS. WebRTC Camera, the AlexxIT integration with 2,178 GitHub stars, gets that under a second by streaming WebRTC straight to the browser through the go2rtc engine the same author wrote. The complication for anyone reading this in 2026 is that Home Assistant has since bundled go2rtc itself, so the core camera card already does low-latency WebRTC for most cameras. The integration is no longer the only way to get the result; it is the way to get the result with more control. Here is what that control amounts to.

What the integration does that the core card does not

The core go2rtc integration exposes your existing camera entities over WebRTC. WebRTC Camera gives you a dedicated Lovelace card with knobs the core card lacks: a choice of transport per card (WebRTC first, falling back to MSE, then MJPEG, then a poster image), two-way audio for cameras that support it, a digital zoom overlay, camera-side PTZ buttons wired to Home Assistant services, a shortcuts bar, mute and fullscreen controls, and the ability to pass any go2rtc source string directly from the card YAML without creating an entity first.

That last one is the real feature. A card like this needs no camera entity at all:

type: custom:webrtc-camera
url: rtsp://user:[email protected]:554/stream1
mode: webrtc,mse
poster: /local/camera-poster.jpg
ptz:
  service: onvif.ptz
  data_left: {entity_id: camera.front, pan: LEFT}
  data_right: {entity_id: camera.front, pan: RIGHT}

Because go2rtc's source syntax is available, the same card can show an RTSP camera, an ONVIF camera, a USB webcam on the HA host, a Tapo or Dahua camera through go2rtc's native modules, or another go2rtc instance's stream. The go2rtc guide covers that source grammar; the integration is mostly a way to point a card at it.

Installation is HACS, then two decisions

Install through HACS as an integration, restart, then add "WebRTC Camera" from the integrations page. The first decision is which go2rtc it should use. It can run its own embedded binary (the default, listening on 1984 for the API and 8555 for WebRTC), or point at the go2rtc already inside Home Assistant, or at an external go2rtc on another host, typically the one that Frigate bundles. If you run Frigate, use Frigate's go2rtc: one process pulls each camera once and both Frigate and Home Assistant read from it, which halves the load on the camera and removes a whole class of "works in one place but not the other" bugs.

The second decision is about networking. WebRTC needs the browser to reach the go2rtc host directly over UDP, or fall back to TCP on 8555, or fail over to a STUN or TURN server. On the LAN this is automatic. Through a reverse proxy from outside, raw WebRTC will usually fail and the card will fall back to MSE, which is a couple of seconds of latency instead of one, and that is fine. Through Nabu Casa remote access or a VPN, same story. Do not spend an evening trying to get WebRTC through a proxy; set mode: webrtc,mse and let the fallback happen.

The 256 MB is for go2rtc, not the integration

The card itself is JavaScript in the browser. The embedded go2rtc is where memory goes, and it is small: 30 to 80 MB for a handful of cameras when no transcoding is happening, because WebRTC and MSE both pass the camera's H.264 through untouched. The number climbs only if you ask go2rtc to transcode (H.265 cameras for browsers that cannot decode it, or MJPEG output), and then a Raspberry Pi will feel it. Keep cameras on H.264 substreams for the card and reserve the H.265 main stream for recording.

What it is not

It is not an NVR. Nothing is recorded, no motion is detected, no clips are kept; that is Frigate's job, and the pairing is the standard local camera stack: Frigate for detection and recording, its go2rtc for restreaming, and WebRTC Camera as the live viewing card in your dashboards. It is also not standalone: without Home Assistant there is nothing to install, and anyone wanting low-latency viewing without HA should run go2rtc directly, which ships its own web page on port 1984 that does the same thing with fewer buttons.

What I'd do

New Home Assistant install with cameras in 2026: try the core camera card first, since go2rtc is already there. Install WebRTC Camera the moment you want two-way audio, PTZ on the card, or a stream that is not an entity, which for me was about a week in. Point it at Frigate's go2rtc if Frigate is running, keep mode: webrtc,mse, and leave the transcoding options alone. The first month with Home Assistant notes cover the rest of the dashboard around it.

Similar video surveillance apps