3分钟把RTSP摄像头变成WebRTC低延迟直播:go2rtc零依赖流媒体快速上手指南
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
你的RTSP摄像头在安防软件里工作正常,可一旦想在浏览器里直接打开它,就开始折腾:装插件?搭HTTP-FLV服务器?转码成HLS?go2rtc 是一个零依赖的摄像头流媒体应用,只需一行配置写上摄像头地址,就能把 RTSP、ONVIF、RTMP 等协议实时转换成浏览器原生可播的 WebRTC 流,默认不转码、延迟极低。
它到底是什么:一个把流"原样搬运"的枢纽
go2rtc 的定位一句话:纯 Go 编写的摄像头流媒体应用,单个可执行文件,Windows、macOS、Linux、FreeBSD 上开箱即用,没有任何运行时依赖。
它的核心机制可以概括为"输入 → 搬运 → 输出":
- 输入:摄像头把流交过来。通用协议覆盖 RTSP/RTSPS、ONVIF、RTMP、HTTP-FLV、MJPEG、HLS,另有一批品牌私有通道——Apple HomeKit、TP-Link Tapo/Kasa、小米、Wyze、Ring、Google Nest、GoPro,以及通过 v4l2/alsa 直连的 USB 摄像头和本地音频设备;
- 搬运:默认不做转码,只做协议封装和转发,没有编解码引入的额外延迟。只有当浏览器的编解码能力与流不匹配(比如摄像头只出 G.711 音频而浏览器只认 Opus)时,才调用 FFmpeg 按需转码;
- 输出:同一路流被同时以 WebRTC(WHEP)、MSE/MP4、HLS、RTSP、RTMP、MJPEG、Apple HomeKit 等格式对外提供,并根据浏览器能力自动挑选最合适的组合。
还有一条反向通道:双向音频。浏览器麦克风的音频会被送到摄像头扬声器,这是门铃、对讲类场景的关键能力。
核心能力一览:不止是"转协议"的五件事
| 能力 | 你能得到的东西 |
|---|---|
| 15+ 种输入 | RTSP/ONVIF/RTMP/HTTP-FLV/HLS/MJPEG/HomeKit/WebRTC(WHEP),加 Tapo、小米、Wyze 等品牌私有协议和 USB 本地设备 |
| 10+ 种输出 | WebRTC、MSE/MP4、HLS、RTSP、RTMP、MJPEG、MPEG-TS、HomeKit,还能经 RTMP/RTMPS 推到 YouTube、Telegram |
| 双向音频 | 覆盖 WebRTC、RTSP(ONVIF Profile T)、海康 ISAPI、Tapo、小米、Wyze、Ring 等;支持把音乐或电台直播推送到摄像头喇叭 |
| 多源编解码协商 | 同一流挂多个源(如 RTSP 直连视频 + FFmpeg 转出的 Opus 音频),自动匹配浏览器能力,不用你操心"这个浏览器能不能播" |
| 实时监控 | WebUI 的 net 页面展示每条连接的协议、编解码、包数与流量(流管理模块) |
另外两个容易忽略的细节:
- 内置轻量转码:G.711/PCM 音频自动重新封装为 FLAC 供 MSE/MP4/HLS 输出,非 8kHz 采样率的音频会自动重采样进 WebRTC,无需任何配置(FFmpeg 模块说明);
- 全部配置都能在 WebUI 里在线编辑,带语法高亮与校验(应用模块文档)。
最小路径跑起来:两条命令从克隆到浏览器播放
前提只需装好 Go(或直接下载官方对应平台的单文件二进制,共 13 种,含 32/64 位 ARM):
git clone https://gitcode.com/GitHub_Trending/go/go2rtc cd go2rtc && go run main.go同目录放一个go2rtc.yaml,最短只需要一行:
streams: hall-camera: rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0启动后默认打开三个端口:1984(WebUI 与 HTTP API)、8554(RTSP 服务器,供其他程序拉流)、8555(WebRTC 连接)。浏览器打开http://localhost:1984,即可看到玄关摄像头的实时画面。
如果你更习惯容器,官方提供的alexxit/go2rtcDocker 镜像预装了 FFmpeg 与 Python(用于硬件加速转码),支持386、amd64、arm/v6、arm/v7、arm64五种架构,旧 NAS 和树莓派上docker run即可。
典型用法一:浏览器里低延迟观看与对讲
假设你的摄像头支持双向音频(RTSP ONVIF Profile T、TP-Link Tapo、小米、Wyze 等大量机型在列):
- 实时观看:
http://localhost:1984/webrtc.html?src=hall-camera,WebRTC 直连,是 go2rtc 支持的延迟最低的链路; - 双向对讲:地址后追加
&media=video+audio+microphone,浏览器麦克风变成对讲通道,你说的话直接送到摄像头喇叭。
对门铃、门口对讲这类场景,这是最实用的一条路径:不装专用 App,浏览器就能看、能说。
典型用法二:给 Home Assistant / Frigate 喂实时流
go2rtc 是这两类项目的默认搭档:Home Assistant 2024.11+ 内置 go2rtc 集成,Frigate 的官方文档也推荐用它作为 NVR 输入,解决"低延迟显示"与"可落盘录制"需要不同编码格式的老问题。
想让 Frigate 或 Home Assistant 直接录 MP4,用这一行:
rtsp://192.168.1.123:8554/hall-camera?mp4?mp4滤镜会让 RTSP 链路只输出 MP4 兼容的编码(H264/H265 + AAC),而低延迟的观看页面继续走 WebRTC,两者用的是同一路流(HTTP API 文档)。这些连接关系都能在 WebUI 的 net 页面里可视化:
上手后的疑问:兼容、资源与安全
Q:树莓派、老 NAS 能跑吗?A:官方提供 Linux ARM 32/64 位二进制(含树莓派 1/Zero 的 armv6 和 MIPS 架构),Docker 镜像也覆盖 arm/v6、arm/v7、arm64。
Q:会不会吃满 CPU?A:默认模式是协议搬运、不转码,几路摄像头占用很小;只有显式添加ffmpeg:前缀的源时才会调用 FFmpeg(Docker 镜像已预装,可开启硬件加速)。
Q:暴露到网络上安全吗?A:默认三个端口对局域网开放、无需鉴权。建议按需绑定127.0.0.1,对外访问走反向代理。特别注意:API 可以驱动echo/exec等执行本地命令的源,1984 端口绝不能直接暴露公网(详见 README 安全章节)。
下一步
克隆仓库后运行go run main.go,在go2rtc.yaml里写入摄像头地址,再打开http://localhost:1984即可开始观看。想深入各协议细节,从 模块总览表 和 WebUI 播放器页面 入手。
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考