go2rtc 视频流转发快速指南:5 分钟把摄像头接进浏览器
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
go2rtc 是一个用 Go 语言编写的视频流转发与协议转换服务。它能从 RTSP、ONVIF、WebRTC、HomeKit 及各品牌私有协议中拉流,再以 RTSP、WebRTC、HLS、MP4、RTMP 等格式重新输出,让你不用装专用 App,直接在浏览器里低延迟播放任意摄像头。适合家庭监控用户、智能家居玩家,以及需要把摄像头接入 Home Assistant、Frigate 等系统的开发者。
适合谁用
三个最常见的情况,中一条就可以继续往下看:
- 手头的摄像头只出 RTSP 流,想在浏览器或手机上直接看
- 家里混着小蜜、Wyze、TP-Link、海康、大华等不同品牌设备,想统一成一个入口
- 要给 Frigate、Home Assistant 或自己的平台喂视频流
安装步骤:推荐 Docker,另有两条路径
路径一(推荐):Docker
镜像alexxit/go2rtc已内置 FFmpeg,开箱即用。启动时暴露三个端口:1984(Web 管理页)、8554(RTSP 服务)、8555(WebRTC,建议 TCP 和 UDP 都开)。
docker pull alexxit/go2rtc docker run -d --name go2rtc \ -p 1984:1984 -p 8554:8554 -p 8555:8555 -p 8555:8555/udp \ alexxit/go2rtc路径二:二进制文件
从 Release 页面下载对应操作系统(Windows / macOS / Linux / FreeBSD)的文件,零依赖直接运行;Linux 和 macOS 记得先加执行权限:
chmod +x go2rtc_linux_amd64 ./go2rtc_linux_amd64路径三:源码编译
git clone https://gitcode.com/GitHub_Trending/go/go2rtc cd go2rtc go build -o go2rtc .三条路径的结果都一样:浏览器打开http://localhost:1984/,进入 Web 管理界面。
快速配置方法:一条流跑起来
配置文件是工作目录下的go2rtc.yaml,最小可用配置只有一行:
streams: 前门摄像头: rtsp://192.168.1.123:554/live也可以在 Web 界面的 Add 页面直接粘贴 RTSP 地址,go2rtc 会自动探测并建立连接。默认端口分工如下:
| 端口 | 协议 | 用途 |
|---|---|---|
| 1984 | TCP | Web 管理页与 HTTP API |
| 8554 | TCP | RTSP 服务,供第三方系统拉流 |
| 8555 | TCP/UDP | WebRTC 连接与媒体传输 |
典型落地场景
场景一:RTSP 摄像头浏览器直播
已有设备:只有 RTSP 输出、没有网页直播的普通 IPC。 做什么:把 RTSP 地址写进streams,浏览器打开 WebUI 的播放页。 得到什么:WebRTC 播放器低延迟画面,无需安装任何客户端,手机同样可访问。
场景二:门铃对讲
已有设备:支持双向音频的摄像头或门铃(RTSP ONVIF Profile T、海康 ISAPI、小米、Wyze、Ring、TP-Link Tapo 等)。 做什么:通过 go2rtc 播放该流,在浏览器麦克风授权后说话。 得到什么:网页端实时对讲。注意浏览器只在 HTTPS 站点下开放麦克风,外网访问需要配好 TLS(API 支持tls_listen)。
场景三:多品牌统一接入下游系统
已有设备:homekit://、onvif://、xiaomi://、wyze://等不同来源混用。 做什么:每个来源各占一个streams条目,go2rtc 统一对外提供 RTSP / HLS / MP4 / WebRTC。 得到什么:Frigate 0.12+ 和 Home Assistant 2024.11+ 原生集成都能直接以rtsp://本机:8554/流名拉流,做录像或 AI 检测,不再各自对接私有协议。
关键能力解析
多协议进出:同一路流,按需用不同格式消费
输入侧覆盖 rtsp、rtmp、mpjpeg、onvif、webrtc、homekit、hls,以及 xiaomi、wyze、tapo、tuya、ring 等私有协议,还能接exec/ffmpeg外部进程和本地 v4l2/alsa 设备;输出侧提供 rtsp、webrtc、rtmp、hls、mp4、mjpeg、homekit、webtorrent。价值在于:同一个摄像头可以同时给浏览器(WebRTC)、NVR 系统(RTSP/MP4)、老播放器(HLS/MJPEG)用,互不冲突。
编解码自动匹配:解决"有流但播不了"
WebRTC 和 MSE 场景下,go2rtc 会探测浏览器能力,从一路流的多个来源里自动挑出能播的编解码器组合。对 RTSP、HLS、MP4 这类无法协商的场景,可以在拉流地址上加过滤器手动指定,例如?video=h264&audio=aac。另外 PCMA/PCMU 这类电话级音频会被自动重打包成 FLAC,使 MSE/MP4/HLS 链路在多数浏览器(包括 Apple 设备)里可播。什么时候最有用:浏览器里只有画面没声音,或 H265 源在部分浏览器黑屏时。
按需转码:默认零转码,需要时才动 FFmpeg
绝大多数场景 go2rtc 直接复制码流,不产生转码开销。只有当源与目标格式不兼容(比如需要旋转画面、换音频编码)时,才为这一路流挂一个 FFmpeg 来源:
streams: 摄像头: - rtsp://192.168.1.123/live - ffmpeg:rtsp://192.168.1.123/live#audio=opus这样该流里就同时存在"原始 RTSP"和"FFmpeg 转码"两个来源,客户端按能力自动选用。更多参数(分辨率、码率、硬件加速)见 internal/ffmpeg/README.md。
常见问题与避坑
浏览器无法播放或黑屏
- 先看摄像头源编码:H265 在不少浏览器受限,README 里的编解码兼容对照表可以逐浏览器排查
- 换播放模式试试:内置页面 www/stream.html 支持
mode=webrtc,mse,hls,mp4,mjpeg参数切换技术栈 - 外网访问 WebRTC 时,确认路由器放通了 8555 端口的 TCP 和 UDP
视频延迟偏高
- 播放端优先用 WebRTC,这是延迟最低的输出格式;HLS 只适合回放类场景
- 用 VLC/ffplay 等客户端看 RTSP 时,把缓存调到最低(ffplay 加
-fflags nobuffer -flags low_delay) - 带宽紧张时给流加一条摄像头子码流作为备选来源,让客户端按能力选用
音频没有或对讲失效
- 确认摄像头本身支持双向音频(ONVIF T、ISAPI、品牌私有协议),纯视频流加不出声音
- 摄像头端优先选 AAC 音频;PCMA/PCMU 质量低、兼容性差,能不用就不用
- 浏览器麦克风需要 HTTPS,本地
http://localhost除外
进阶方向与资源入口
- HTTP API:
/api/streams获取流列表与状态、/api/streams/流名查单路详情、/api/frame.jpeg取快照;完整接口定义见 website/api/openapi.yaml,配置项说明见 internal/api/README.md - 连接拓扑监控:WebUI 的 Net 页面展示每条活动连接的协议、格式、包数与字节数;API 侧还能以 json 或 dot 格式导出交互式连接图
- 自建播放器:www/ 目录下的
video-rtc.js、video-stream.js可直接嵌入自己的前端,实现自动选路、自动断流重连 - 集成示例代码:examples/ 里有对接 Home Assistant、MJPEG、RTSP、mDNS 的最小工程
- 进阶特性:推流到 YouTube/Telegram(RTMP)、启动即预载流、向摄像头反向播音频,见 internal/streams/README.md
- 安全建议:1984 和 8554 端口默认对整个局域网开放,同网段任何设备都无需认证即可看流。如需收紧,把
api与rtsp的listen改为127.0.0.1,开启local_auth,外网 WebUI 交给反向代理做鉴权;webrtc:8555保留对外即可
下一步
先按 Docker 路径把服务跑起来,接入一路 RTSP 摄像头,确认浏览器画面正常后,再接入 Frigate 或 Home Assistant。遇到问题时,仓库根目录的 README.md 中的编解码对照表和 Tips 章节是最快的排查入口。
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考