news 2026/9/12 5:08:26

go2rtc视频流转发教程:把RTSP监控摄像头转成WebRTC低延迟直播

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
go2rtc视频流转发教程:把RTSP监控摄像头转成WebRTC低延迟直播

go2rtc视频流转发教程:把RTSP监控摄像头转成WebRTC低延迟直播

【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc

家里的监控摄像头大多只支持RTSP,用VLC能看,但在手机和浏览器里要么看不了、要么延迟几秒。go2rtc 是一个用 Go 写的视频流转发工具:把一路 RTSP 拉进来,同时以 WebRTC、MP4、HLS、RTSP 等协议输出,浏览器里延迟可以压到亚秒级。本文用 Docker 把它跑起来,完整走一遍「RTSP 进、浏览器看」的流程。

Docker最短路径启动命令

只给一条最短路径:Docker 部署(镜像已内置 FFmpeg 和 Python,无需额外安装)。

docker pull alexxit/go2rtc docker run -d --name go2rtc --network host --restart unless-stopped alexxit/go2rtc

参数说明:

  • --network host是重点。WebRTC 要用到 8555 端口(TCP/UDP),host 网络模式下不用手动映射 UDP
  • 配置文件是go2rtc.yaml,WebUI 里可以直接编辑;不加任何配置也能启动

启动后打开http://localhost:1984/,这是 Web 管理界面。默认情况下三个服务同时监听:

  • 1984(TCP):HTTP API + Web 界面
  • 8554(TCP):RTSP 服务器,VLC/FFmpeg/录像系统从这里取流
  • 8555(TCP/UDP):WebRTC 信令和媒体传输

转发架构:go2rtc到底在做什么

go2rtc 的核心是一个"流列表"。配置里每路流(stream)可以有多个来源,比如 RTSP、FFmpeg、本地设备:

streams: hall: - rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0 - ffmpeg:rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0#video=h264#audio=opus

它的工作方式是按需拉起 + 编解码协商,而不是持续转发:

  1. 只有当有客户端(浏览器、VLC、录像程序)连接某路流时,go2rtc 才去拉取源;没人看就不占用连接
  2. 客户端连接时会声明自己支持哪些编解码器(Chrome 支持 H264/H265/OPUS,Safari 支持 H264/AAC 等)。go2rtc 从该流所有来源中挑出客户端能直接播的那一路,大多数情况不转码
  3. 只有所有来源的编码器和客户端都不匹配时(比如摄像头出 H265+PCMA,而你要在手机上看),才通过 FFmpeg 来源现场转码,转成 H264+OPUS 这类兼容性最好的组合

另外有一个省心的细节:很多监控摄像头的音频是 PCMA/PCMU(G.711,只有 256 级音阶,音质很差),go2rtc 会自动把它们重打包成 FLAC 塞进 MP4/HLS 容器,浏览器基本都能播,不需要你额外配置。

这套设计的收益是:延迟取决于输出协议本身。WebRTC 输出可以做到亚秒级,RTSP 输出和源基本同级,而 HLS 天生有几秒延迟——选对输出协议比调参数更重要。

RTSP转WebRTC端到端实战

场景:一台大华 RTSP 摄像头,目标是在浏览器里实时看,且延迟最低。

第一步,在 WebUI 的 Add 页或go2rtc.yaml里加流:

streams: hall: rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0

保存后可以用 API 验证流是否存在(返回 JSON 流列表):

curl http://localhost:1984/api/streams

第二步,打开浏览器播放页:

  • 首选http://localhost:1984/webrtc.html?src=hall—— WebRTC 播放,延迟最低,且支持双向对讲(加参数media=video+audio+microphone后可用麦克风讲话)
  • 备选http://localhost:1984/stream.html?src=hall—— 通用播放器,会自动在 WebRTC/MSE/HLS/MJPEG 之间按浏览器能力选择

第三步,验证。打开页面后,摄像头画面应在 1 秒左右出现;在 WebUI 的信息页可以看到这路流当前的生产者(producer)和消费者(consumer)连接、编码器和码率。如果页面黑屏而信息页显示流已拉起,说明是编解码器不匹配,接着做:

  1. 先试过滤器,不改编码:播放地址后加?video=h264,强制从流里选 H264 轨
  2. 过滤器不够(源只有 H265)时,加第二个来源现场转码:
streams: hall: - rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0 - ffmpeg:rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0#video=h264#audio=opus

注意ffmpeg:前缀的第二个来源不会主动拉流,只有客户端需要 H264/OPUS 时才被拉起,平时不占资源。

延迟高、黑屏、没声音的三个排查方向

现象:浏览器能连但画面黑屏或无声音。常见原因是 H265 或 PCMA 音频浏览器不支持。先用上面?video=h264过滤器排除;音频不行就在 FFmpeg 来源里加#audio=opus(WebRTC)或#audio=aac(MP4/HLS 录像场景)。

现象:麦克风/双向对讲不生效。浏览器只在 HTTPS 页面开放麦克风权限,HTTP 下即使页面正常也无法采集音频。用 Nginx 或 Caddy 加一层 HTTPS 反代即可;另外摄像头本身要支持双向音频(ONVIF Profile T、ISAPI 等,项目按协议逐个适配,可在 internal/ 各模块 README 中确认)。

现象:延迟有几秒。先确认你走的不是 HLS(api/stream.m3u8),再确认播放端不是播放器缓冲。用下面的命令可以直接测 RTSP 输出端的真实延迟,它比 VLC 更接近 go2rtc 的水平:

ffplay -fflags nobuffer -flags low_delay "rtsp://192.168.1.123:8554/hall"

如果 RTSP 端延迟正常而 WebRTC 端延迟高,优先检查是否开启了 FFmpeg 转码(转码会引入编码延迟),能#video=copy就不转码。

硬件加速、推流与生态集成

三个值得知道的延伸方向:

  • 硬件加速转码:需要#video=h264这类视频转码时,追加#hardware参数自动选择硬件编码器,或写死#hardware=vaapi(支持 vaapi、cuda、videotoolbox 等)。Docker 用户可换alexxit/go2rtc:latest-hardware镜像并加--privileged参数,详细说明见 internal/ffmpeg/hardware/
  • RTMP 推流:在配置里用publish:段把任意流推到 YouTube、Telegram 等 RTMP/RTMPS 地址,要求 H264+AAC,配置示例在 internal/streams/ 的 README 里
  • 生态集成:go2rtc 已被 Home Assistant(2024.11+ 原生集成)和 Frigate(作为视频处理核心)采用;想自己集成可参考 examples/ 里的 Go 客户端示例,以及 www/ 中内置的播放器前端(webrtc.htmlvideo-rtc.js

WebUI 的网络页会画出所有活动连接的拓扑(源、生产者、消费者、编码器和流量),排障时比日志直观得多。


如果你手头有一批只支持 RTSP 的摄像头,想在浏览器低延迟查看或统一转给录像系统,go2rtc 值得花一小时搭起来。下一步:跑起上面的docker run命令,把你第一路rtsp://地址加进配置,然后打开webrtc.html?src=你的流名看效果。

【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 5:08:14

C语言链表实现与应用全解析

1. 链表在C语言中的核心价值与应用场景链表作为数据结构中最基础的动态存储结构,在C语言开发中扮演着不可替代的角色。与数组相比,链表的最大优势在于其动态内存分配特性——不需要预先知道数据规模,可以随时根据需求扩展或收缩存储空间。我在…

作者头像 李华
网站建设 2026/9/12 5:08:11

awesome-gpt-image-2:从API接入到提示词工程的全栈实践指南

1. 项目概述与核心价值做AI图像相关开发或者内容创作的朋友,最近应该都注意到了GitHub上出现了一批名为“awesome-gpt-image-2”的资源聚合项目。这类项目主打的就是把GPT图像生成(gpt-image-2)相关的工具、教程、提示词技巧、API集成案例全部…

作者头像 李华
网站建设 2026/9/12 5:07:48

三步切换到 NotepadNext:跨平台的 Notepad++ 替代方案

三步切换到 NotepadNext:跨平台的 Notepad 替代方案 【免费下载链接】NotepadNext A cross-platform, reimplementation of Notepad 项目地址: https://gitcode.com/GitHub_Trending/no/NotepadNext Notepad 是老牌文本编辑器,但基本只在 Windows…

作者头像 李华
网站建设 2026/9/12 5:07:26

ML-KWS嵌入式静态审计:ARM Compiler 5.06u7下的内存安全与实时性保障

1. 为什么一个KWS项目值得花两周做静态审计——从“能跑通”到“可交付”的分水岭你有没有遇到过这样的情况:在Cortex-M4上跑通了ML-KWS-for-MCU的demo,语音唤醒率看起来不错,但一进产线就崩——烧录后设备偶发复位,功耗曲线毛刺频…

作者头像 李华
网站建设 2026/9/12 5:07:16

LunaTranslator日文视觉小说翻译实用指南

LunaTranslator日文视觉小说翻译实用指南 【免费下载链接】LunaTranslator 视觉小说翻译器 / Visual Novel Translator 项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslator 第一次打开一款日文视觉小说,对话框里挤满了小字假名,最…

作者头像 李华
网站建设 2026/9/12 5:06:36

重庆有哪些IP广播销售厂家呢?

在重庆,有不少IP广播销售厂家,重庆优沃科技是其中较具代表性的一家。以下从多个方面为你介绍重庆优沃科技及IP广播相关情况。重庆优沃科技简介与业务重庆优沃科技有限公司成立于2011年5月,位于重庆市九龙坡区石桥铺,是西南地区在音…

作者头像 李华