3分钟上手go2rtc:把RTSP摄像头变成浏览器里的低延迟直播
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
go2rtc 是一个摄像头视频流转发应用:把摄像头的 RTSP 流转成 WebRTC(浏览器原生支持的实时音视频协议)等网页能直接播的格式,完成 RTSP转WebRTC 的零延迟观看。照做下来,你能在浏览器里看到亚秒延迟的监控画面,还能顺手把画面推上直播平台。
🚀 先跑起来——最短路径
方式一:下载二进制,双击就完事
无依赖、跨平台,一个文件就是整个应用。从官方 Release 页下载对应系统的文件(Linux 选 go2rtc_linux_amd64,Windows 选 go2rtc_win64.zip),加执行权限后直接运行:
# 给文件加执行权限,Linux/macOS 必做 chmod +x go2rtc_linux_amd64 # 启动,默认读取当前目录的 go2rtc.yaml ./go2rtc_linux_amd64方式二:一条命令起 Docker
懒得折腾本地环境就用 Docker,一条命令拉镜像,映射三个端口就能用:
# 拉官方镜像 docker pull alexxit/go2rtc # 起容器:1984 网页端,8554 RTSP,8555 WebRTC docker run -d --name go2rtc -p 1984:1984 -p 8554:8554 -p 8555:8555 -p 8555:8555/udp alexxit/go2rtc怎么判断跑通了
浏览器打开 http://localhost:1984/ ,看到流管理页面就算成功。此时还没加摄像头,页面是空的,正常——下一步就加。
| 端口 | 干什么用 | 协议 |
|---|---|---|
| 1984 | Web 界面和 API | HTTP |
| 8554 | 对外输出 RTSP 流 | RTSP |
| 8555 | 浏览器低延迟观看 | WebRTC |
它是怎么工作的
go2rtc 的思路是:左边接任意来源,右边出任意格式,中间只管转发。输入侧支持 RTSP、RTMP、HLS、WebRTC,甚至本地文件和脚本输出;中间是 streams 核心模块,源编码和输出格式匹配时直接转发,不匹配才调 FFmpeg 转码;输出侧是 WebRTC、RTSP、HLS、MJPEG 等服务,各走各的端口。
看图:最左侧是各种输入,中间是 go2rtc 本身,右侧按协议分叉。你只需要记住一件事——同一个流可以同时在多种格式下被观看,互不影响。
第一个配置——跟着做就能用
在程序所在目录建一个 go2rtc.yaml,也可以直接在 WebUI 里改(带语法检查):
streams: # 流的名字,后面所有观看 URL 都用它 front-door: # 改成你的摄像头 RTSP 地址 - rtsp://admin:password@192.168.1.100:554/stream1就两行有效配置。改第一行名字,观看地址跟着变;改第二行地址,就是换摄像头。保存后回 http://localhost:1984/ 首页,列表里出现 front-door,点它的 WebRTC 链接,画面就出来了。
三个你会真正用到的场景
场景一:手机上零延迟看家
痛点:RTSP 直接看延迟 3 秒起步,浏览器还不支持直接播放。
操作:不用改配置,go2rtc 默认就把流转成了 WebRTC,打开这个页面:
http://localhost:1984/stream.html?src=front-door&mode=webrtc结果:手机浏览器打开就是亚秒延迟的实时画面,延迟比直接看 RTSP 低一个量级。
场景二:接进录像和自动化系统
痛点:Frigate、Home Assistant 这类系统只认 RTSP 或 HLS 地址。
操作:go2rtc 自身就是 RTSP 服务器,把 8554 端口上的流指过去就行:
rtsp://192.168.1.50:8554/front-door http://192.168.1.50:1984/api/stream.m3u8?src=front-door结果:一个摄像头、一份拉流,录像、回放、自动化全都能吃。
场景三:把摄像头直播出去
痛点:想推到 YouTube 或 Telegram,平台要求 H264+AAC 编码。
操作:加一段 publish 配置,源编码对不上时用 FFmpeg 源转码:
publish: front-door: - rtmp://xxx.rtmp.youtube.com/live2/你的推流密钥 streams: front-door: - ffmpeg:rtsp://admin:password@192.168.1.100:554/stream1#video=h264#audio=aac结果:有人观看时自动开始推流,没人看自动停,不用你盯着。
出问题了?先查这3处
| 症状 | 大概率原因 | 一条命令验证 |
|---|---|---|
| 流一直连不上 | 地址或账号密码错 | ffplay 直连 RTSP |
| 有画面但延迟高 | 用了 RTSP/HLS 观看 | URL 换 mode=webrtc |
| 有视频没声音 | 音频编码不匹配 | 源后加#audio=copy |
| 浏览器麦克风是灰的 | 麦克风需要 HTTPS | 给 1984 加反代证书 |
如果都没命中,去项目 Issue 区搜关键词,大概率有人踩过同一个坑。
想再快一点?
只有当流需要视频转码(比如源是 MJPEG 或 H265)时,加一个#hardware参数就能启用 GPU 硬编码:
streams: front-door: ffmpeg:rtsp://admin:password@192.168.1.100:554/stream1#video=h264#hardware大多数摄像头直接输出 H264,不转码就是最低延迟,这条可以不用管。更多转码参数见 FFmpeg 源文档,流管理的完整能力看 streams 模块说明。
回到开头那句承诺:摄像头变成浏览器里的低延迟直播,只需要一个配置文件。下一步建议把 WebUI 首页每个流的链接都点一遍,感受同一个流用 WebRTC、HLS、MJPEG 看的效果差别;遇到搞不定的问题直接去项目 Issue 区提问。
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考