5 分钟跑通 go2rtc:摄像头流媒体零配置安装与部署指南
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
go2rtc 是一个零依赖、零延迟的摄像头流媒体应用,一条命令就能把 RTSP、ONVIF、HomeKit 等几十种输入源转成 RTMP、WebRTC、HLS 等主流输出。它的核心卖点就一个:协议转换能力极强,且默认延迟是同类方案里最低的。
这篇 go2rtc 安装指南的目标,就是让你先跑通服务,再谈深入。
装前 30 秒自检
动手前先确认环境,别装到一半卡壳:
| 项目 | 要求 | 说明 |
|---|---|---|
| 操作系统 | Windows / macOS / Linux / FreeBSD / ARM | 必须 |
| CPU 架构 | x86、ARM v6 及以上(含树莓派) | 必须 |
| 磁盘空间 | 二进制约 100 MB,Docker 镜像几百 MB | 必须 |
| 网络 | 默认占用 1984、8554、8555 三个端口 | 必须,可配置 |
| FFmpeg | 仅转码和硬件加速需要 | 可选/推荐 |
go2rtc 本体是单文件编译,没有任何运行时依赖,上面的条件几乎不构成门槛。
一条命令快速起步
Docker 是阻力最小的起步方式,全程不超过 3 条命令:
docker run -d --name go2rtc --network host --restart unless-stopped \ -e TZ=Asia/Shanghai -v ~/go2rtc:/config alexxit/go2rtc启动容器:--network host让 1984(Web/API)、8554(RTSP)、8555(WebRTC)直接落在宿主机上,-v ~/go2rtc:/config把配置目录挂出来,以后改配置不用进容器。
docker ps确认容器状态是Up且端口正常监听。
docker logs go2rtc看到类似go2rtc v1.9.x的启动日志即代表服务已就绪。
验证是否真的活着:浏览器打开http://localhost:1984/,能看到摄像头列表页就成功;再看一眼http://localhost:1984/net.html,这张实时网络拓扑图能看到所有流的进出方向——没流时是个空图,属于正常现象。
多平台部署手册
跑通 Docker 后,其他方式和平台的路子大同小异:拿到二进制、赋予权限、执行。
Windows 下二进制直跑还是 WSL 跑
适合想把 go2rtc 常驻在本机 Windows 的用户。从 release 下载go2rtc_win64.zip解压后,双击go2rtc.exe或在 PowerShell 里执行即可。如果原生跑得不顺(个别 USB 摄像头驱动场景),直接用 WSL2 走 Linux 流程,体验一致。跑完你应该看到终端持续输出日志,且http://localhost:1984/可打开。
macOS 一键部署:下载、解压、执行
curl -L -o go2rtc_mac_arm64.zip https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_mac_arm64.zip unzip go2rtc_mac_arm64.zip && chmod +x go2rtc_mac_arm64 && ./go2rtc_mac_arm64Apple Silicon 用mac_arm64,Intel 换mac_amd64。启动后终端打印版本信息即成功。
Linux 二进制部署
curl -L -o go2rtc https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64 chmod +x go2rtc && ./go2rtc树莓派等 ARM 设备换go2rtc_linux_arm64。
Docker Compose 长期运行
适合需要开机自启、方便和别的容器(比如 Home Assistant)放在一起的场景:
services: go2rtc: image: alexxit/go2rtc network_mode: host privileged: true # 需要访问 USB/视频设备时保留 restart: unless-stopped environment: - TZ=Asia/Shanghai volumes: - "~/go2rtc:/config"docker-compose up -d即可,配置改动都落在宿主机~/go2rtc/go2rtc.yaml。
最小配置就长这样,在 WebUI 的 config 页改,或写进 yaml 后重启:
streams: camera1: rtsp://admin:password@192.168.1.100/cam/realmonitor?channel=1&subtype=0核心能力速查
go2rtc 的本职是协议转换:把各种输入源统一收进来,再转成前端要的任何格式。一张架构图就能看明白:
| 协议/功能 | 一句话说明 | 典型场景 |
|---|---|---|
| RTSP/RTSPS、ONVIF、MJPEG | 最主流的摄像头输入协议 | 海康/大华/TP-Link 等摄像头接入 |
| WebRTC | 超低延迟双向通信输出 | 网页前端实时预览 |
| RTMP / HLS / HTTP-FLV | 推流到外部或网页播放 | 推到 NVR、B 站、网页播放器 |
| MP4 / MSE | 边看边存、无刷新播放 | 录像文件、浏览器 MSE 播放 |
| HomeKit | Apple 生态直接接入 | 家庭摄像头进 Home 应用 |
| 双向音频 | 对摄像头喊话、播放音频 | 门口对讲、远程提醒 |
| 云端 API | 小米、Wyze、Ring、Nest 等 | 云摄像头本地化接入 |
想深挖某个协议怎么写、怎么连,直接翻 examples/ 目录,每个协议都有独立示例工程。
进阶调优与硬件加速
GPU 硬件转码
场景:树莓派上转码吃满 CPU。给流地址加#hardware参数,go2rtc 会自动探测并选择 CUDA/VAAPI 等对应编码器:
streams: cam: ffmpeg:rtsp://.../stream#video=h264#hardware=cuda也可以直接用官方latest-hardware镜像(预装 FFmpeg 与 Python)。效果:转码路径下 CPU 占用明显下降。
RTSP 推流
场景:把流推给外部 RTMP 接收端。配置里加一条发布地址即可:
streams: out: rtmp://target/server/app/stream保存后 go2rtc 开始向该地址持续推流。
WebRTC 低延迟调参
场景:网页预览延迟偏高。确认 ICE 服务器配置正常即可,WebRTC 默认 UDP 传输加 H.264 即可做到几百毫秒级:
webrtc: listen: :8555 ice_servers: - urls: ["stun:stun.l.google.com:19302"]踩坑速查
- 端口被占用→ 8554 常和 NVR、其他 RTSP 服务打架 → 在配置里把冲突端口改成别的,如
rtsp: {listen: ":9554"}。 - 权限不足→ Linux 下访问 USB 摄像头、声卡报错 → 以 root 运行,或把用户加入
dial、video组;Docker 则保留privileged。 - 流源鉴权失败→ RTSP 地址里用户名密码写错或含
@、#等特殊字符 → 改用 URL 编码(如user%40name),密码用引号包住。 - 浏览器能开、摄像头连不上→ 防火墙/路由器 NAT 拦截 → 放行 1984、8554、8555,注意 8555 是UDP,UDP 是最容易被漏掉的。
- 实在搞不定→ 先看终端日志和
net.html拓扑定位断在哪一环,仍无解就到 项目仓库 提 issue,附上你的 go2rtc.yaml 和相关日志。
收尾
到这儿:服务装好了,Web 界面能进,流源加一条streams:就能看画面,硬件加速和双向音频都是可选的下一步。
继续探索:
- 项目总览与协议列表:README.md
- 内置 WebUI 使用说明:www/
- HTTP/WebSocket API 文档:internal/api/
- 各协议示例代码:examples/
配置改完记得保存重启,流不通时先看net.html——它比日志直观得多。
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考