10分钟跑通 go2rtc:零门槛把摄像头变成低延迟直播流
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
摄像头 A 的 RTSP(实时流传输协议,大多数 IP 摄像头的标配)在浏览器里放不出来,摄像头 B 只能开它自家的 APP,想给家人看个画面还得折腾一堆插件——这种跨协议的别扭,go2rtc 流媒体服务器一次就能解决。它是单个可执行程序,把各种格式的摄像头信号"翻译"成浏览器、手机、NVR 都能直接播放的格式。
读完本文你将能:
- 用二进制、Docker、Home Assistant 三条路线之一部署 go2rtc
- 接入第一路 RTSP 摄像头,在浏览器里秒级延迟观看
- 把同一路流以 RTSP、HLS、WebRTC 等格式输出给不同客户端
- 用症状速查表处理"打不开页面、画面卡顿、配对失败"三类故障
30 秒看懂 go2rtc 解决什么问题
go2rtc 是一个零依赖、单文件的开源流媒体服务器,支持 Windows、macOS、Linux 全平台。它的角色是"流媒体枢纽":左侧接入 RTSP、ONVIF、HomeKit(苹果智能家居协议)、RTMP 等几十种输入源,右侧按客户端需要转换成 WebRTC(浏览器实时视频协议)、RTSP、HLS(分片直播,手机 APP 最爱)等输出,还支持双向语音。
核心优势:
- 零依赖:没有数据库和运行环境,加执行权限就能跑
- 低延迟:多数协议原生转发、不重编码,延迟接近摄像头本身
- 任意转任意:输入输出自由组合,还会自动匹配客户端支持的编码格式
- 按需转码:只有编解码不匹配时才调用 FFmpeg 转码,并支持硬件加速
- 双向语音:浏览器麦克风的声音能直接从摄像头喇叭放出来
选一条部署路线跑起来
| 路线 | 适合谁 | 关键动作 |
|---|---|---|
| 二进制直接运行 | Windows / macOS / Linux 个人电脑 | 下载对应平台的可执行文件 |
| Docker 容器 | 服务器、NAS、需要长期在线 | 一条 docker run 命令 |
| Home Assistant 插件 | 已搭 HA 智能家居的用户 | 商店里安装插件并启动 |
下载二进制并直接启动
- 从项目发布页下载对应平台包:Windows 选 win64.zip,macOS 选 mac,Linux 选 linux_amd64
- Linux 和 macOS 先给文件加执行权限,再运行
chmod +x go2rtc_linux_amd64 ./go2rtc_linux_amd64⚠️ 默认会监听三个端口:1984(Web 管理页)、8554(RTSP 服务)、8555(WebRTC,同时占用 TCP 和 UDP)。
✅ 看到什么算成功:浏览器打开http://localhost:1984,出现带 add、config、log、net 菜单的 go2rtc 管理页。
一行命令跑 Docker 容器
docker run -d --name go2rtc --network host --restart unless-stopped -v ~/go2rtc:/config alexxit/go2rtc⚠️ 必须用
--network host网络模式:WebRTC 依赖 UDP 8555 端口,桥接网络下外网设备可能连不进来。
✅ 看到什么算成功:docker ps显示容器处于 Up 状态,浏览器访问http://localhost:1984出管理页。
在 Home Assistant 里装插件
- 设置 → 加载项 → 仓库 → 添加,填入官方插件仓库地址(项目主页上有)
- 打开 go2rtc 加载项,依次点 Install 和 Start
✅ 看到什么算成功:HA 侧边栏出现 go2rtc 图标,点进去就是管理页,且自带 Home Assistant 的登录鉴权,省去单独配置密码。
实战一:接入第一路摄像头流
零代码:在 Web 界面添加流
- 打开
http://设备IP:1984,点顶部 add - 选择协议类型(如 rtsp),填流名称和地址,例如
rtsp://admin:123456@192.168.1.108/av_stream/ch0 - 保存并重启,然后到 net 页确认这路流在线
配置文件:一行 YAML 搞定
不想点界面?在工作目录(或 Web 的 config 页)编辑go2rtc.yaml,最小可用配置只有两行:
streams: hall-camera: rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0streams下的键名就是流名称,建议用英文,后面所有播放地址都靠它定位。保存后点 Save & Restart 立即生效,不必整台机器重启。
实战二:让同一路流处处可看
流接入后,go2rtc 已经自动以多种格式对它"开放窗口",换不同客户端只是换地址:
| 你想做什么 | 地址或命令 | 典型场景 |
|---|---|---|
| 浏览器秒开直播 | http://设备IP:1984/stream.html?src=hall-camera | 日常监控、双向语音 |
| VLC 播放或 NVR 录像 | rtsp://设备IP:8554/hall-camera | 录像回放系统 |
| 手机 APP、iOS 远程看 | http://设备IP:1984/api/stream.m3u8?src=hall-camera | 跨网远程访问 |
| 抓一帧快照 | http://设备IP:1984/api/frame.jpeg?src=hall-camera | 图片通知、联动 |
| 苹果家庭里看 | 家庭 APP 中添加配件 | Apple 生态集成 |
📌 遇到"画面能放、声音没有"多半是编码不匹配(比如摄像头 AAC 音频、浏览器 WebRTC 只认 OPUS)。给同一个流加一路ffmpeg:源做转码,go2rtc 会自动在多条轨道里挑浏览器能用的那条:
streams: hall-camera: - rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0 - ffmpeg:rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0#audio=opus按症状排查故障
症状一:1984 管理页打不开
- 先确认进程活着:
ps aux | grep go2rtc - 再查三个端口是否被占用或没监听
- 远程打不开就检查防火墙,放行 1984 / 8554 / 8555
ps aux | grep go2rtc netstat -tulpn | grep -E "1984|8554|8555"症状二:画面能播但延迟高、卡顿
- 摄像头和服务器之间尽量走有线;无线从 2.4G 换 5G
- 在摄像头里降一档分辨率或帧率,先保流畅
- 客户端也压延迟:VLC 里把缓存拉到最低,或用下面这条低延迟播放命令
ffplay -fflags nobuffer -flags low_delay "rtsp://设备IP:8554/hall-camera"症状三:HomeKit 配对失败或某品牌摄像头不在线
- 打开管理页 log 标签,看对应模块报什么错
- HomeKit 配件只能被一个家庭占用,先从原家庭里移除
- 重启摄像头和 go2rtc 服务,再确认两者在同一网段、mDNS 能互相发现
接下来怎么走
到这里,你已经有了一台能看、能转、能对讲的 go2rtc 流媒体网关。想继续深入,三条路:
- 性能:开启硬件加速转码,参考 internal/ffmpeg/README.md
- 安全:把 API 绑回本机地址并加反代鉴权,细节见 README.md 的 Security 一节
- 生态:接入 Home Assistant 与 Frigate 做智能联动,模块全景见 internal/README.md
把这篇文章收藏起来,下次接新摄像头直接照着填地址就行;卡在哪个协议上,欢迎到评论区留言,一起解决。
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考