mrkeyoor.com_
Sat 05 Sept 18:32 UTC
Self-Hostedevaluationupdated 05 Sept 2026

go2rtc review

go2rtc is a small camera streaming gateway that accepts feeds from cameras and services, then makes them available through RTSP, WebRTC, HLS, MP4, and other outputs. It solves the compatibility problem between camera-specific protocols, browser codecs, Home Assistant, and NVR software.

trackingstars / 7d
Verdict

Our go2rtc checkout installed 220 npm packages in 44 seconds and npm audit found 0 known vulnerabilities, but no npm build or test target existed, so our run never verified the Go server. Use go2rtc when a compact protocol bridge can remove camera and browser incompatibilities from a Home Assistant or Frigate setup. Lock down the three default ports, test the exact camera and codec path, and keep it away from irreplaceable streams until the v1.9.14 crash case is understood in your environment.

We ran it

Lab card: what happened when we ran go2rtcScreenshot of go2rtc (go2rtc.org)
Install✓ · 44s220 packages · 115 MB
Buildn/ano build script
Testsn/ano test script
Known vulns00 critical · 0 high · 0 moderate · 0 low (npm audit)
Repo540 files~59,959 lines of source · 2.6 MB · 3 CI workflows

Answers from our run

Does go2rtc build from source?

Dependencies installed in 44 seconds (220 packages), and the project has no separate build step. We cloned commit c245815 into a clean Debian container with 3 CPUs and no project-specific setup.

Does go2rtc have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Does go2rtc have known vulnerabilities in its dependencies?

npm audit found none in the dependency tree at the time of our run.

Who should not use go2rtc?

Anyone who will expose the default API directly: go2rtc warns that API access can reach echo and exec, and the default LAN ports allow unauthenticated camera viewing.

What are the alternatives to go2rtc?

MediaMTX, Frigate, Restreamer. Our go2rtc checkout installed 220 npm packages in 44 seconds and npm audit found 0 known vulnerabilities, but no npm build or test target existed, so our run never verified the Go server.

Setup4/5Binary and add-on paths are short; secure exposure takes care
Docs5/5Protocols, codecs, ports, integrations, and risks are specific
Community4/514,116 stars and September issue activity, despite a July push
Maturity3/5v1.9.14 is widely packaged, but our Go path was not tested

Who it’s for

Home Assistant and Frigate users who need one local bridge for several camera protocols.
Self-hosters with mixed RTSP, ONVIF, HomeKit, Ring, Nest, Tapo, Wyze, or Xiaomi sources.
Developers adding live camera feeds through an HTTP or WebSocket API.
Operators willing to test codecs per viewer and add FFmpeg when a source must be transcoded.

Who it’s NOT for

Anyone who will expose the default API directly: go2rtc warns that API access can reach echo and exec, and the default LAN ports allow unauthenticated camera viewing.
Operators who need complex transcoding without FFmpeg: the README says those algorithms will not be embedded and points to FFmpeg instead.
Installations that cannot tolerate one malformed publisher dropping every stream: open issue 2465 reports v1.9.14 panicking on an empty RTMP video payload and restarting repeatedly.
Xiaomi cloud users who require unattended operation: open issue 2233 reports authentication expiring after about 3 days and requiring a manual token deletion and login.
Buyers who assume a protocol name guarantees their exact camera works: the README documents vendor-specific protocol faults, and the active issue queue contains model and firmware gaps.

Setup reality

Our fresh Debian sandbox installed 220 npm packages in 44 seconds, using 115 MB on disk. npm audit reported 0 known vulnerabilities. The lab found no npm build or test target, so both steps were skipped; our run did not compile or exercise the Go streaming server. The commit c245815 checkout had 540 files, about 59,959 lines of source, and occupied 2.6 MB before installation.

Normal users download a release binary, run a container, or install the Home Assistant add-on. A minimal YAML file needs a named stream and its camera URL, often including device credentials. Vendor sources such as Nest, Ring, Xiaomi, or Wyze can need account tokens or their own setup. FFmpeg is required when codecs must be changed; the documented containers include it. Browser access, remote viewing, and stable WebRTC also need port, firewall, and reverse-proxy decisions.

The API listens on 1984, RTSP on 8554, and WebRTC on TCP and UDP 8555 by default. go2rtc says all three are reachable from the local network and that local users can view cameras without authorization. Bind the API and RTSP to localhost or protect the web interface with a reverse proxy before treating it as a household service. Codec support varies by browser, camera, and output, so a visible stream in one client does not prove the others will work.

The 540-file checkout routes streams across protocols

Our 540-file go2rtc checkout is a camera transport layer with inputs for RTSP, ONVIF, WebRTC, HomeKit, Ring, Nest, Tapo, Wyze, Xiaomi, local devices, files, and external commands. It can expose a source through RTSP, WebRTC, HLS, MP4, MJPEG, or other documented outputs. Home Assistant and Frigate can consume those republished feeds, while developers can use HTTP and WebSocket APIs. Two-way audio and track mixing cover cases that a simple RTSP relay would miss.

The source occupied 2.6 MB and contained about 59,959 lines, which is compact for the number of protocol adapters present. A single named stream can combine an original camera feed with an FFmpeg-generated audio track, then let go2rtc choose tracks that a browser accepts. That is the practical appeal: operators define a camera once and stop teaching every viewer how to reach its private vendor protocol. It remains a streaming component, so recording, events, and object detection belong in surrounding software.

Three default ports make first use easy and LAN exposure real

The 2.6 MB repository starts with predictable endpoints: the web API uses port 1984, RTSP uses 8554, and WebRTC uses TCP and UDP 8555. A minimal YAML file can contain one stream name and one camera URL. Release binaries cover Windows, macOS, Linux, FreeBSD, several CPU architectures, and older Raspberry Pi hardware. The project also publishes containers and a Home Assistant add-on, with FFmpeg and Python included in the documented container image.

Those defaults are unsafe on a network you do not fully trust. The README says all three ports are accessible from the local network and anyone there can watch cameras without authorization. It warns that an attacker reaching the API may invoke insecure sources such as echo and exec, gaining full server access. Bind the API and RTSP listeners to localhost, limit modules and API paths, restrict executable paths, and put standalone web access behind an authenticated reverse proxy.

What happened when we ran it

Our Node-focused sandbox installed 220 npm packages in 44 seconds and consumed 115 MB on disk. npm audit reported 0 known vulnerabilities: 0 critical, 0 high, 0 moderate, and 0 low. The checkout was commit c245815 in an unprivileged Debian container with 3 CPUs, 8 GB of RAM, and no secrets. Our scan also recorded 3 CI workflow files and no tests directory.

The lab found no npm build script or target, so it skipped the build. It also found no npm test script or target and skipped tests. Those are absences, not successes. This measurement path checked the repository's npm dependency surface and did not compile, start, or send video through the Go application. The 44-second install and clean npm audit therefore say nothing about camera latency, stream stability, Go compilation, or protocol correctness. Each of those claims would require a different run.

Nine documented codecs still require endpoint matching

The roughly 59,959 source lines recognize nine listed audio and video codecs, including H.264, H.265, AAC, Opus, MJPEG, and several PCM forms. Compatibility still depends on the output and viewer. The README's matrix shows different results for Chrome, Firefox, Safari, Home Assistant, WebRTC, MSE, HTTP streaming, and HLS. Codec filters select from tracks that already exist. They do not create a codec that the camera never supplied.

go2rtc performs a few narrow conversions, such as repacking some PCM audio for modern browser containers and resampling audio for WebRTC. Complex transcoding stays in FFmpeg, and the README says there are no plans to embed those algorithms. That separation keeps the core smaller, but it moves CPU sizing, hardware acceleration, and FFmpeg syntax into the operator's job. Test the exact chain from camera to viewer, including audio and talkback. A picture in one browser proves only that one negotiated path.

v1.9.14 issues show why every camera needs a trial

Version v1.9.14 was published January 19, 2026, with major Xiaomi work, a native Wyze source that requested testing, WebRTC listener changes, ONVIF changes, and a new web configuration editor. Open issue 2465 reports that the same release panics when a DJI RTMP publisher sends an empty video payload. The reporter says every stream drops during repeated restarts. That is one specific publisher case, yet it matters wherever go2rtc is a shared hub for unrelated cameras.

The 3 CI workflow files do not settle vendor behavior. Issue 2233 reports a Xiaomi cloud token expiring after about 3 days, after which the user deletes the saved token and signs in again. Other current reports cover dual-lens Tapo selection, unusual H.265X firmware, and reconnect behavior for long-running consumers. Camera makers change firmware and often implement standards unevenly. Treat the protocol list as a set of adapters to test, not a promise that every model revision works.

July code and September issue activity show uneven cadence

GitHub recorded the last source push on July 13, 2026, and listed 14,116 stars plus 900 combined issues and pull requests. The latest release remained v1.9.14 from January, while open issues were still being updated on September 5. That combination is more informative than the release date alone: the project has a large audience and current user activity, although the published release and source push are separated from the newest reports.

Our run installed 220 npm packages and found 0 known vulnerabilities, yet the missing npm build and test targets leave the Go product unverified by this lab pass. go2rtc is still an unusually capable bridge for Home Assistant, Frigate, and mixed camera fleets. Its compact binary path makes a trial cheap. Adoption should follow only after authentication, listener binding, codec negotiation, vendor login renewal, restart behavior, and the exact camera firmware have survived a realistic soak on the network where it will run.

Alternatives

ProjectWhat it isPick it when
MediaMTXA general-purpose live media server and proxy supporting several ingest and playback protocols.pick this instead when standards-based publishing and media-server operation matter more than camera-vendor integrations.
Frigate gh↗A local NVR built around camera recording, events, and object detection.pick this instead when recordings and searchable detections are the product rather than stream conversion alone.
RestreamerA browser-managed service for receiving, processing, and redistributing live video.pick this instead when a guided restreaming interface matters more than smart-home camera protocols and two-way audio.

What people are saying

  1. [github-trending] AlexxIT/go2rtc

Sources

  1. go2rtc repository and README
  2. go2rtc security guidance
  3. go2rtc codec guidance
  4. go2rtc v1.9.14 release
  5. go2rtc RTMP crash issue 2465
  6. go2rtc Xiaomi token issue 2233

More self-hosted reviews

rook · openfga · matomo · signoz · SmartTube · copyparty · the whole board →