go2rtc 零依赖上手:一个二进制搞定摄像头多协议转发
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
家里混用着海康、Tapo、小米几路摄像头,APP 各看各的,想在浏览器里统一监看、还想丢给 VLC 或苹果家庭用,协议这一关就卡住了。传统方案通常要自己拼一台媒体服务器,配置繁琐还容易延迟高。go2rtc 是反过来的思路:一个 Go 语言写的单文件流媒体服务器,负责把各路摄像头的视频流拉进来,再转成 RTSP、WebRTC、HLS、HomeKit 等常用协议输出。
一句话认识 go2rtc:摄像头流的"万能插座"
你可以把 go2rtc 理解成一个中间层:输入侧吃 RTSP、RTMP、ONVIF、MJPEG、HomeKit、WebRTC 甚至 USB 摄像头;输出侧同一路流可以同时以 WebRTC、RTSP、HLS、MP4、HomeKit 等协议被访问,按需自动匹配编码,匹配不上才调用 FFmpeg 转码,所以大多数场景延迟能压到很低。
不装任何东西,怎么把 go2rtc 跑起来
最快路径是二进制直跑:到项目发布页下载对应平台的文件(Windows 是 zip 包,Linux 和 macOS 是单文件),赋权后直接运行:
chmod +x go2rtc_linux_amd64 # 仅 Linux/macOS 需要 ./go2rtc_linux_amd64然后浏览器打开http://localhost:1984,看到带 add、config、log、net 四个入口的界面,就算成功。
更习惯容器环境的话,一条命令也行(--network host别省,原因后面排坑里讲):
docker run -d --name go2rtc --network host \ -v ~/go2rtc:/config alexxit/go2rtc跑通后记住三个默认端口:1984(WebUI 和 HTTP API)、8554(RTSP 输出)、8555(WebRTC)。
接入第一路 RTSP 摄像头,看它变成什么
- 打开 WebUI 的 config 页,这是一个带语法检查的编辑器,右侧可以直接 Save & Restart。
- 在
streams:段落加一行,格式就是「流名: 地址」:
streams: mycam: rtsp://admin:pass@192.168.1.108/av0- 点 Save & Restart,go2rtc 会重读配置,首页的流列表里
mycam出现并显示在线,说明拉流成功。
不用编辑器也可以:直接在go2rtc.yaml里写同样的内容,启动时用./go2rtc --config go2rtc.yaml指定该文件。
一路流四种打开方式:多协议输出怎么用
接入成功后,同一路流会被同时以多种协议对外服务,你按需取用:
| 你想在哪看 | 访问地址 | 说明 |
|---|---|---|
| 浏览器低延迟 | http://IP:1984/webrtc.html?src=mycam | 无需插件,延迟最低 |
| VLC / NVR 设备 | rtsp://IP:8554/mycam | 传统播放器与录像系统 |
| 手机远程查看 | http://IP:1984/hls/mycam.m3u8 | 兼容性最好,延迟稍高 |
| 苹果家庭 | 按提示配对为 HomeKit 配件 | HomeKit 生态内使用 |
URL 里写的协议决定 go2rtc 用哪种方式应答:客户端支持的编码就直转,实在不匹配才调 FFmpeg。这也是它"按需转码"的体现,多数流其实根本不走转码。
第一次不顺利?多半是这几个原因
- 画面卡住或协商失败:8555 和 8554 都是 TCP+UDP,UDP 不放开 WebRTC/RTSP 就会卡在连接阶段。
- Docker 里 WebRTC 连不上:改回
--network host,容器内网络转发 UDP 包很容易丢。 - 双向音频没反应:不是每路源都支持,看 双向音频说明 里各协议的标记;需要时可用
ffmpeg:或echo:源做回音输入。 - 配置改完没生效:WebUI 记得点 Save & Restart,或者重启容器。
想继续折腾的话,这三个方向最常用:
- 开硬件加速降 CPU:FFmpeg 硬件加速
- 用 ffmpeg 虚拟源接入 USB 摄像头:ffmpeg 模块
- 把 go2rtc 当 WebRTC 源集成进自家应用:WebRTC 模块
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考