用 go2rtc 流媒体网关接入 UniFi Protect:把私有摄像头流转成标准 RTSP 流,5 分钟走通

发布时间:2026/9/19 1:50:15
用 go2rtc 流媒体网关接入 UniFi Protect:把私有摄像头流转成标准 RTSP 流,5 分钟走通
用 go2rtc 流媒体网关接入 UniFi Protect把私有摄像头流转成标准 RTSP 流5 分钟走通【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc读完这篇你能在自己的 Synology NAS 上跑起一个 go2rtc 流媒体网关把 UniFi Protect 摄像头的私有 RTSPS 流变成任何播放器、任何智能家系统都能直接消费的标准 RTSP / WebRTC / HLS 流。go2rtc 是一个用 Go 写的轻量流媒体转换应用核心能力就一句话从几十种私有协议进货转成所有主流格式出货且很多协议下是零转码、接近零延迟的转发。这个场景适合谁适合装了 UniFi Protect或其他只给私有流地址的摄像头品牌想把录像接到 Frigate、Home Assistant、VLC 或 NAS 回放里的人。适合NAS 常开、想给全家/多系统共享同一路视频又不想在每台设备上单独折腾私有 SDK 的人。不适合只需要浏览器里看看画面、且摄像头已提供标准 RTSP 地址的人——VLC 直连摄像头即可不用中间加一层网关。动手前自检清单Synology NAS 已装好 Container ManagerDSM 7.2 起的新名字就是群晖的 Docker。SSH 能登录方便跑一条docker命令。UniFi Protect 摄像头已接入 NVR并能拿到它的 RTSPS 地址和 token。30 秒确认在 Protect 控制台对摄像头点 Details → Stream复制出rtsps://...地址。端口空闲1984WebUI/HTTP API、8554RTSP 服务端口、8555WebRTC 端口TCPUDP。30 秒确认docker ps里没看到已占这些端口的容器即可。接受用 host 网络模式WebRTC 和 UDP 摄像头流量在容器网桥下经常通不了官方 Docker 文档也是直接推荐network_mode: hostNAS 上跑一个专用容器影响不大。部署实操1. 拉取镜像。群晖 Container Manager 里搜alexxit/go2rtc拉最新版或者 SSH 里执行docker pull alexxit/go2rtc。这个镜像已内置 FFmpeg 和 Python后续想加转码源不用再装任何东西。2. 创建容器。GUI 建容器对 host 网络模式支持得比较别扭直接 SSH 跑这一条最稳# 宿主机 ~/go2rtc 映射进容器 /config配置文件 go2rtc.yaml 就住这里 docker run -d --name go2rtc \ --network host \ --restart unless-stopped \ -v ~/go2rtc:/config \ alexxit/go2rtc--network host让容器直接用 NAS 的 IP 和端口后面所有访问地址都按 NAS 的 IP 来写。3. 打开 WebUI。浏览器访问http://NAS_IP:1984能看到 add / config / log / net 四个标签页就算活了。以后改配置全部在这个页面上做点 Save Restart 会自动重启容器并加载新配置所以第 2 步加了--restart unless-stopped。核心配置streams 到底怎么写所有配置都在 WebUI 的 config 页编辑本质是编辑容器里/config/go2rtc.yaml这一个文件。对你这个场景真正要动的只有一个配置项streams→ 它管什么整个应用认识哪些流。流的名字camera1这种是唯一的调用句柄后面所有播放链接、API 都靠它寻址。建议怎么填streams: camera1: # 摄像头原始 RTSPS 地址token 换成 Protect 给的那串 - rtsps://NAS_IP:7441/xxxxxxxxxxxx?enableSrtp几个容易踩的底层逻辑别跳过名字不能和摄像头品牌绑死。camera1可以叫front-door但一旦在别的系统里引用了改名等于断链。rtsps://加?enableSrtp是在告诉客户端握手时启用 SRTP 加密Protect 的流地址通常长这样如果直连报证书错误优先先试试不带rtsps的明文rtsp://地址很多 Protect 部署两者都开。一个流名可以写多个源list 形式系统怎么选这是最常被问的底层逻辑go2rtc 不是挑一个能用的源而是把每个源都当一路生产者同时维护播放端浏览器/客户端连上来时按客户端支持的能力跨源协商出一套最合适的编码组合——比如 RTSP 源出 H.264AAC你再加一个ffmpeg:转码源出 Opus 音频浏览器要的音轨自动从转码源拿视频仍走零延迟的 RTSP 源。某个源掉线时它会按退避策略自动重连恢复后无感切回视频不断。所以写多个不是备胎机制是多源编码协商是 go2rtc 的核心特性详见 README 的 Codecs negotiation 一节。输出侧给什么由源决定。RTSP 端口能提供的编码源里已有的编码查询参数如?mp4、?videoh264audioaac只是从已有编码里挑挑不出就得加 FFmpeg 源来造编码见 FFmpeg 模块文档。一键验证流是否通三种方式由快到慢浏览器打开http://NAS_IP:1984/add 标签页会列出camera1点进去用 WebRTC 播放器看画面——延迟最低能听到声音说明音频也通了。播放器直接开rtsp://NAS_IP:8554/camera1。VLC 记得把偏好里的缓存级别调到最低否则默认缓冲会让你误以为延迟高。想给 Frigate/Home Assistant 用的话拿http://NAS_IP:1984/api/stream.m3u8?srccamera1HLS或http://NAS_IP:1984/api/stream.mp4?srccamera1mp4MP4 渐进流测试。另外 net 标签页是排障神器所有连接、走的协议、传的编码、字节数都画在一张图上一眼看出卡在哪一段。高频坑速查表现象大概率原因一行解法播放器报stream not found访问用的流名和 config 里的 key 不一致或改完没点 Save Restart对照 config 页的 key 原样复制保存后看容器日志确认重启RTSPS 握手报证书错误自签证书/SRTP 协商失败换明文rtsp://地址或确认地址带?enableSrtp画面有但延迟大秒级走了 HLS/RTSP 且播放器缓冲高播放端换 WebRTC 模式ffplay 加-fflags nobuffer -flags low_delay401/403 拒绝Protect 的 token 过期token 是有有效期的回 Protect 重新生成流地址替换 config 里的源再往深走一步硬件转码NAS 有 Intel 核显或想上 GPU 转码换alexxit/go2rtc:latest-hardware镜像版本说明在 Docker 文档。接入 Home Assistant / 写自定义页面看 HTTP API 文档 和 OpenAPI 描述。多源编码协商的完整规则README 的 Codecs 章节 和 流处理模块源码。到这里你已经有了一个标准 RTSP 端点rtsp://NAS_IP:8554/camera1——任何系统、任何播放器对着这一个地址拿画面即可。【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考