go2rtc 摄像头流统一管理:5步把一路摄像头接进浏览器
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
家里 NAS 上跑着 RTSP 的海康摄像头,走廊的 Tapo 只走私有云协议,门口还有一台 HomeKit 摄像头,想在手机上全部看一遍,原本得装三个 App。go2rtc 做的事情就是摄像头流统一管理:把这些不同协议、不同厂商的源按同一套格式拉进来,再统一从 RTSP、WebRTC、HLS、MJPEG 等出口播出去。它用 Go 写的,核心是一个独立二进制文件。
为什么选 go2rtc
总述一句话:它把"接入摄像头"和"播出视频"两端都做成可插拔模块,中间不需要常驻的转码服务。
- 零外部依赖:Windows、macOS、Linux、FreeBSD 都有对应二进制,树莓派这种低功耗设备也能跑
- 协议覆盖面广:输入端支持 RTSP、RTMP、MJPEG、ONVIF、HLS 等公开协议,以及 HomeKit、Tapo/Kasa、小米、Wyze、Tuya、Ring 等私有协议;输出端覆盖 WebRTC、RTSP、RTMP、HLS、MJPEG、MP4/MSE、MPEG-TS、ONVIF 等
- 按需转码:只有客户端编解码器不匹配时才调用 FFmpeg 转码,其余情况直接转发原始码流
所有模块的完整清单可以看 internal/README.md。
📦 一条命令部署:Docker 跑起来 go2rtc
用 Docker 是多数人的最省事路径,镜像里已预装 FFmpeg 和 Python,多架构(amd64、arm64、arm/v7 等)都有:
docker run -d \ --name go2rtc \ --network host \ --restart unless-stopped \ -v ~/go2rtc:/config \ alexxxit/go2rtc其他路径各一句话:直接去 Releases 下载对应系统的二进制并chmod +x即可运行;Home Assistant 用户可装官方 add-on 或 WebRTC 集成;需要最新特性时用alexxit/go2rtc:master镜像。
▶️ 最小配置跑通第一路流
在项目目录放一个go2rtc.yaml,只写streams就够:
streams: doorbell: rtsp://admin:password@192.168.1.100:554/Streaming/Channels/101 hall: http://192.168.1.101:8080/video启动后会发生这些事:API 服务默认监听 1984 端口,RTSP 服务器监听 8554(TCP),WebRTC 监听 8555(TCP/UDP)。打开浏览器访问http://localhost:1984,进入 streams 页面点一下摄像头名称,就能直接播放;页面会根据浏览器能力自动协商用 WebRTC 还是 HLS。同一路流还可以这样取:
rtsp://127.0.0.1:8554/doorbell—— 给 Frigate、VLC 等传统客户端http://127.0.0.1:1984/hls/doorbell.m3u8—— 给 iOS Safarihttp://127.0.0.1:1984/mjpeg/doorbell—— 给只需要 JPEG 快照的场景
Web 配置页带语法高亮和校验,改完立即生效,不用重启。
⚙️ 进阶玩法:转码、双向语音与硬件加速
转码与缩放
一个流可以配多个源。给不友好的 H.265 源追加一条 ffmpeg 源,浏览器就能播:
streams: cam4k: - rtsp://admin:password@192.168.1.100:554/stream1 - ffmpeg:rtsp://admin:password@192.168.1.100:554/stream1#video=h264#audio=opus#width=1280#height=720#width/#height控制缩放,#video/#audio指定目标编解码器;细节见 internal/ffmpeg/README.md。
双向语音
Tapo/Kasa、小米、Wyze、Tuya、Ring、海康 ISAPI 以及带音频通道的 RTSP 流都支持双向语音,浏览器里用 WebRTC 页面就能对讲。注意一点:浏览器要求站点是 HTTPS 才允许调麦克风,所以要走 Web 对讲就得配证书。
硬件加速与推流
转码时加#hardware标记即可启用 VAAPI、NVENC、VideoToolbox 等硬件加速(ARM 平台有专门的硬件加速构建,参考 docker/hardware.Dockerfile)。另外,任何一路流都可以通过 RTMP/RTMPS 发布到 YouTube、Telegram 这类平台,也可以把多路源合并成一个流,写法见 internal/streams/README.md。
网络监控:看清每一条连接
Web 界面的 Net 页把所有活动连接画成一张拓扑图,能看到每条连接的 IP、格式、协议、包数和字节数;通过 HTTP API 还能以 JSON 或 DOT 格式取同一份数据,方便接进自己的监控面板。排查"这路流到底走了哪条链路、谁在拉"时,这一页比翻日志快得多。
🧭 踩坑指南:4个高频问题的解法
手机上播不了,PC 上正常。多半是摄像头只出 H.265,而多数浏览器(尤其 iOS Safari)解不了 HEVC。解法:按上面的进阶写法给这路流追加一条#video=h264的 ffmpeg 源,让 go2rtc 只对该流做转码。
第一帧黑屏或拉流要等很久。流是按需加载的,部分摄像头冷启动慢。解法:在配置里给该流开 preload,让 go2rtc 启动时就把流拉起来(见 internal/streams/README.md)。
浏览器里麦克风按钮是灰的。浏览器安全策略要求 HTTPS 才授权麦克风。解法:前面挂一层反向代理加证书,走 HTTPS 访问 1984 端口。
转码时 CPU 飙高。软件转码是主要原因。解法:加#hardware启用硬件加速,或用#width/#height降低目标分辨率,实在不行就减少需要转码的流数量——能直转的流不要多配 ffmpeg 源。
下一步
go2rtc 的价值在于把几十种摄像头协议收敛成一套统一的流管理,而把单一路流从配置到浏览器播放走通,全程只用到一份 3 行的 YAML。今天就做一件事:挑出家里最旧、最不方便看的那路摄像头,用上面的最小配置把它加进streams,然后在 WebRTC 页面看它动起来。
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考