如何使用 go2rtc 的 GoPro 源接入 USB 或 Wi-Fi 连接的 GoPro 运动相机?
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
本文解决的任务是:把通过 USB 或 Wi-Fi 连接到 go2rtc 主机的 GoPro 相机,作为一路流接入 go2rtc,并把它转发为 WebUI 播放、RTSP 输出等常规格式。前提条件是 go2rtc 版本不低于 v1.8.3(GoPro 源是在 v1.8.3 新增的,见 internal/gopro/README.md),运行系统为 Linux、Mac、Windows 或 HassOS。
支持的机型与系统
根据 internal/gopro/README.md 的说明:
- 支持机型:HERO9、HERO10、HERO11、HERO12;
- 支持系统:Linux、Mac、Windows、HassOS;
- 其他相机型号的 API 不同,目前不在支持范围内。
超出这个范围的机型,文档明确说明"Other camera models have different APIs",没有给出可用的配置方式,不要尝试用gopro://源强接。
准备:安装并启动 go2rtc
按 README.md 的三种方式任选其一安装 go2rtc,然后打开 Web 界面http://localhost:1984/:
- 二进制:从最新 release 下载对应平台的文件(如 Linux 64-bit 用
go2rtc_linux_amd64,Windows 10+ 64-bit 用go2rtc_win64.zip),Linux 和 Mac 上先执行chmod +x go2rtc_xxx_xxx; - Docker:使用
alexxit/go2rtc镜像,支持386、amd64、arm/v6、arm/v7、arm64架构; - Home Assistant add-on:Settings > Add-ons > Plus > Repositories 中添加
https://github.com/AlexxIT/hassio-addons仓库,再在 go2rtc 上 Install > Start。
启动后默认端口:API/Web 界面在 1984(TCP),RTSP 服务器在 8554(TCP),WebRTC 在 8555(TCP/UDP)。配置文件默认为当前工作目录下的go2rtc.yaml,也可以在 WebUI 中直接编辑。
连接相机:USB 与 Wi-Fi 的差别
两种方式在主机侧的准备不同:
USB 连接
- USB 连接的相机会在系统中创建一个新的网络接口(文档原话:USB-connected cameras create a new network interface in the system),相机地址固定落在
172.2X.1YZ.51这个网段内; - Linux 用户不需要安装任何东西;
- Windows 用户需要先安装 GoPro 官方的网络驱动(GoPro Webcam 驱动,文档指向 GoPro 社区页面的说明)。驱动没装好时,系统里不会出现相机对应的网络接口,后面的发现步骤自然也列不出相机。
Wi-Fi 连接
相机通过 Wi-Fi 接入 go2rtc 主机所在网络后,拿到相机在局域网中的 IP 地址,直接用于配置即可,不需要等待接口发现。
两种方式最终都以gopro://<相机地址>的形式写进配置,差别只在地址的来源。
第一步:发现相机地址
打开 WebUI,进入Add页面,点击GoPro按钮。该按钮会调用api/gopro接口(页面实现见 www/add.html,接口注册见 internal/gopro/gopro.go),把发现的相机以表格形式列出来,每条对应一个gopro://<地址>的流源。
发现机制来自 pkg/gopro/discovery.go:扫描本机所有网络接口,匹配172.2X.1YZ.51形式的地址,并向http://<地址>:8080/gopro/webcam/status发请求,请求可达的即被列出来。也就是说,这个列表主要覆盖 USB 连接产生的新接口;Wi-Fi 连接的相机如果不在该网段内,需要自己用相机实际 IP 填配置。
第二步:把流加进配置
文档给出的配置写法(来自 internal/gopro/README.md):
streams: hero12: gopro://172.20.100.51其中hero12是流名,可以自取;172.20.100.51是文档中的 USB 连接示例地址,替换为第一步发现(或自行确认)的相机地址。可以在go2rtc.yaml里直接添加,也可以通过 WebUI 的配置编辑器修改(编辑器带语法高亮和检查)。
从实现上看(pkg/gopro/producer.go),go2rtc 收到流后会向相机的8080端口依次发送/gopro/webcam/stop、/gopro/webcam/start指令,并在本机监听 UDP 端口 8554 接收相机推过来的 MPEG-TS 数据。注意这与 RTSP 服务器同用 8554 端口号,但一个是 UDP、一个是 TCP,两者不冲突。
验证接入结果
接入是否成功,按以下顺序检查:
- WebUI 流列表:添加配置并重启(或保存)后,
hero12出现在 WebUI 的流列表中,说明gopro://源已被 go2rtc 识别并拉起; - RTSP 输出:go2rtc 的任意流都可以以 RTSP 形式取用,格式为
rtsp://<go2rtc主机地址>:8554/<流名>,本例即rtsp://192.168.1.123:8554/hero12(地址换成你的主机); - 低延迟播放核对:README.md 的 Tips 一节给出的低延迟播放命令可以直接用来验证画面:
ffplay -fflags nobuffer -flags low_delay "rtsp://192.168.1.123:8554/camera1"把192.168.1.123换成 go2rtc 主机地址、camera1换成你的流名hero12即可。能持续出画面,说明从相机到 go2rtc 再到输出端整条链路是通的。
排查与限制
- 相机被检测到,但流起不来:文档给出的明确处理方式是关闭防火墙("if the camera is detected but the stream does not start, you need to disable the firewall")。这与上文一致:相机要能通过 HTTP 访问 go2rtc 主机的 8080 端口路径,并把 UDP 数据送到主机的 8554 端口,防火墙拦截这两条方向时就会表现为"发现得到但不出流"。
- Windows 上 GoPro 列表为空:先确认 GoPro Webcam 网络驱动是否已安装、系统里是否出现了相机对应的
172.2X网段接口;驱动未装时新接口不会出现,发现步骤自然无结果。 - 机型不在 HERO9–HERO12 范围内:不要配置
gopro://源,文档明确其他型号 API 不同。 - go2rtc 版本低于 v1.8.3:没有
gopro这个流源类型,需要先升级到 v1.8.3 或之后的版本再操作。
完成上述步骤后,相机会以一路普通 go2rtc 流存在,可以像其他流一样通过 WebUI、RTSP 等通道消费。
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考