go2rtc 连 GoPro 看几分钟自动断流?从设备到运维 3 层解决
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
go2rtc 接 GoPro 相机(HERO9~HERO12)做监控,最典型的翻车现场就是:画面播了三四分钟,相机自己睡了,流直接断。这个坑很常见,但 90% 的情况根子不在 go2rtc,而是相机自己的电源设置。先看相机和 go2rtc 之间到底发生了什么,再按"设备侧 → 验证侧 → 运维侧"的顺序处理,基本一次到位。
先搞懂:go2rtc 和 GoPro 之间发生了什么
go2rtc 把 GoPro 当成一个"会推流的相机",建流过程很短(源码在 pkg/gopro/producer.go):
- 先通过 HTTP(相机 8080 端口)发
/gopro/webcam/stop,清理残留会话 - 本机监听 UDP 8554 端口
- 再发
/gopro/webcam/start,相机开始往 8554 推 MPEG-TS 数据
坑有两处:
- 相机侧有独立的休眠计时器,到点就睡,go2rtc 这边没有任何机制能阻止它
- go2rtc 的 UDP 接收循环带 3 秒读超时——收不到包 3 秒就判定连接结束,并主动回发
/gopro/webcam/stop
所以你的现象是"干脆利落地黑屏",而不是卡帧。流不是卡住的,是被双方一起放下的。
设备侧:把 GoPro"自动关机"改成从不(90% 的情况到这步就完事)
相机休眠是相机自己的行为,软件层面只能绕,不能禁。真正的根治在设备设置里:
- GoPro 连上官方 App
- 设置 → 首选项 → 自动关机(Auto Power Off)
- 改成"从不"(Never)
改完之后记得验证,别以为存了就生效了:挂上 go2rtc,全程不碰相机,等 5 分钟以上,看流还在不在。还在,这步就闭环了。
补充两句:
- 如果相机常年插电(移动电源、Media Mod 之类),把自动关机设成最长档位也行,但做 7x24 监控还是建议直接"从不"
- Windows 用户注意:USB 连接要先装好 GoPro 的网络驱动,相机才会生成 172.2x.1xx.x 网段的接口,详见 internal/gopro/README.md
验证侧:确认相机在线、设置生效
拿到相机地址是排查的地基,两条路:
- WebUI 自动发现:WebUI → Add → GoPro。发现逻辑是扫描本机网卡(pkg/gopro/discovery.go),USB 相机固定落在
172.2x.1xx.51这种地址上,所以自动扫描只认这个模式 - 手动确认:浏览器或 curl 直接请求状态接口
curl http://172.20.100.51:8080/gopro/webcam/status能返回 200,说明相机 HTTP 服务和网络链路都活着;这一步也顺便排除了"地址写错""防火墙拦了 8080"这类低级问题。
确认在线后,在配置里加上流(www/config.html 页面直接编辑即可):
streams: hero12: gopro://172.20.100.51运维侧:加一个 25 秒心跳兜底
改完设置后,如果你的场景满足下面任意一条——相机不归你管(改不了设置)、一次挂多台 GoPro、或者你希望生产环境多一层保险——可以加个心跳脚本兜底:
while true; do curl -m 3 -s http://172.20.100.51:8080/gopro/webcam/status sleep 25 done几个参数建议,直接抄就行:
- 间隔 25 秒:要略短于相机默认休眠时间,间隔拉太长等于没做
- 超时 3 秒:
-m 3防止某次请求卡死把循环拖停 - 失败别退出:脚本里不做退出逻辑,单次超时就跳过,下一轮继续
用 go2rtc 自身的exec源跑也行,但放系统侧(supervisord / cron)更省心,和 go2rtc 进程解耦。
断流时先查什么:60 秒排查顺序
流断了别急着重启,按这个顺序走一遍,绝大多数问题第 1、2 步就定位了:
- 相机还活着吗:
curl http://<host>:8080/gopro/webcam/status,不响应先查相机本身(LED、电量、是不是又睡着了) - 地址还是那个地址吗:USB 拔插、换口之后
172.2x.1xx.51的中间段可能变,重新走一遍 WebUI 自动发现 - 防火墙:UDP 8554(收流)和 TCP 8080(控制)任一被拦,现象都是"流不来";官方说明里明确提到过相机被识别但流不起时要关防火墙
- 看链路图:WebUI 的 net 页能看到每个流的实时拓扑和流量,链路还在但流量归零,基本就是 UDP 侧被掐
- 开 debug 日志:
log.level调到debug再看一次断流瞬间,go2rtc 会打出接收超时的时间线,和相机的睡眠时刻对得上就实锤是休眠问题
行动清单
- 官方 App 里把"自动关机"改为"从不",这是主修复
curl状态接口确认相机在线,记下172.2x.1xx.51地址- 配置里加
gopro://源,挂 5 分钟不动相机验证不再断 - 多台相机或改不了设置的场景,上 25 秒间隔的状态轮询心跳
- 再断流时按上面 60 秒顺序走:相机 → 地址 → 防火墙 → 链路图 → debug 日志
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考