在群晖 NAS 上用 go2rtc 跑通 UniFi Protect 摄像头:完整推流实战指南
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
UniFi Protect 的摄像头画面只在官方 App 里响应,页面一开就卡?go2rtc 就是为这种场景做的流媒体网关:把摄像头原来的 RTSP 流接进来,再转成浏览器能播的 WebRTC、HLS、RTSP 或 MJPEG 页面。在 Synology NAS 上跑它只需要一个容器,零依赖、单文件程序,延迟低到可以直接当现场监视用。
把摄像头原流转成浏览器能播的协议
选它是因为摄像头说的协议和浏览器听的协议根本对不上,中间缺个翻译。go2rtc 站在这个位置:输入端吃十几种协议(RTSP、RTMP、ONVIF、各厂商私有协议),输出端按你需要的玩法吐流。浏览器页面走 WebRTC(一种点对点低延迟流传输协议),通常只有一两帧延迟;旧播放器则可以直接走 RTSP 或 HLS。
它就是一个 Go 语言写的单程序,不用装 Java、不用配数据库。Home Assistant 和 Frigate 里内置的推流核心就是它,这里我们在 NAS 上独立跑一份。
用宿主网络把 go2rtc 容器拉起来
群晖的套件中心里装 Container Manager(就是 Docker 管理工具),拉镜像alexxit/go2rtc建容器。用 compose 文件最省事:
services: go2rtc: image: alexxit/go2rtc network_mode: host restart: unless-stopped volumes: - ~/go2rtc:/config三个关键点:
network_mode: host:WebRTC 需要一大片 UDP 端口,宿主网络模式下直接共享主机网络,不用逐个映射端口~/go2rtc卷是配置存放处,容器内的默认配置路径/config/go2rtc.yaml就指向它- 官方镜像覆盖 x86_64 和 ARM64 架构,群晖常见机型都能跑
跑起来之后,浏览器访问http://192.168.1.10:1984(1984 是默认管理端口)。局域网内使用,无需任何端口转发。
在 WebUI 里粘贴摄像头的流地址
找到 UniFi Protect 的 RTSPS 地址
Protect 控制台里打开摄像头的网络高级设置,能看到一条 7441 端口的 RTSPS 流地址,结尾那串长字符就是 token。
写下第一条 streams 配置
打开 1984 管理页,切到配置编辑器,粘贴:
streams: front_cam: rtspx://192.168.1.10:7441/xxxxxxxxxxxxxxxxfront_cam是流名,后面所有播放地址都靠它找。前缀用rtspx://而不是rtsps://:前者会跳过自签名证书校验,这正是 UniFi Protect 需要的。
保存后容器自动重启加载新配置,写错了编辑器会当场标出语法错误。
✅ 确认流真的跑通了
两种最快的验证方式:
- 快照验证:浏览器打开
http://192.168.1.10:1984/api/frame.jpeg?src=front_cam,出现一帧摄像头画面就说明整条链路通了 - 播放器页面:打开 1984 首页,流列表里
front_cam的 online 一栏亮起,点 stream 进播放页,页面会自动选 WebRTC、MSE、HLS 里最适合的播法
想验证传统播放器,再用 VLC 打开rtsp://192.168.1.10:8554/front_cam即可。
⚠️ 踩坑速查:三个最高频问题
Q:连不上,日志里刷证书错误?
UniFi Protect 的自签名证书是经典坑。把流地址前缀从rtsps://换成rtspx://,地址末尾的 SRTP 参数也一并删掉。
Q:页面提示 stream not found,列表还是空的?
按顺序查三处:配置里的流名和 URL 的src参数是否一致;保存后容器是否重启过;摄像头原始地址能否在 VLC 里直接播放——如果这一步就失败,问题在网络侧而不在 go2rtc。
Q:RTSP 能播,浏览器播放器却是黑屏?
多半是编码问题。摄像头主码流常用 H265,很多浏览器不支持。给这个流加一行转码源,转成 H264 再播:
streams: front_cam: - rtspx://192.168.1.10:7441/xxxxxxxxxxxxxxxx - ffmpeg:front_cam#video=h264下一步
- 双向对讲:摄像头支持 ONVIF Profile T 的话,打开
webrtc.html?src=front_cam页面就能在浏览器里跟现场喊话(麦克风需要 HTTPS) - 直播发布:加一段
publish配置,就能把任意流推到 YouTube 或 Telegram - 配合 Home Assistant / Frigate:它们内置 go2rtc,配好后可直接当远程流源用
最后再打开一次http://192.168.1.10:1984/api/frame.jpeg?src=front_cam,快照图片能刷出来,就算全部接通了。
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考