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/UDPhost 网络模式下不用手动映射 UDP配置文件是go2rtc.yamlWebUI 里可以直接编辑不加任何配置也能启动启动后打开http://localhost:1984/这是 Web 管理界面。默认情况下三个服务同时监听1984TCPHTTP API Web 界面8554TCPRTSP 服务器VLC/FFmpeg/录像系统从这里取流8555TCP/UDPWebRTC 信令和媒体传输转发架构go2rtc到底在做什么go2rtc 的核心是一个流列表。配置里每路流stream可以有多个来源比如 RTSP、FFmpeg、本地设备streams: hall: - rtsp://admin:password192.168.1.123/cam/realmonitor?channel1subtype0 - ffmpeg:rtsp://admin:password192.168.1.123/cam/realmonitor?channel1subtype0#videoh264#audioopus它的工作方式是按需拉起 编解码协商而不是持续转发只有当有客户端浏览器、VLC、录像程序连接某路流时go2rtc 才去拉取源没人看就不占用连接客户端连接时会声明自己支持哪些编解码器Chrome 支持 H264/H265/OPUSSafari 支持 H264/AAC 等。go2rtc 从该流所有来源中挑出客户端能直接播的那一路大多数情况不转码只有所有来源的编码器和客户端都不匹配时比如摄像头出 H265PCMA而你要在手机上看才通过 FFmpeg 来源现场转码转成 H264OPUS 这类兼容性最好的组合另外有一个省心的细节很多监控摄像头的音频是 PCMA/PCMUG.711只有 256 级音阶音质很差go2rtc 会自动把它们重打包成 FLAC 塞进 MP4/HLS 容器浏览器基本都能播不需要你额外配置。这套设计的收益是延迟取决于输出协议本身。WebRTC 输出可以做到亚秒级RTSP 输出和源基本同级而 HLS 天生有几秒延迟——选对输出协议比调参数更重要。RTSP转WebRTC端到端实战场景一台大华 RTSP 摄像头目标是在浏览器里实时看且延迟最低。第一步在 WebUI 的 Add 页或go2rtc.yaml里加流streams: hall: rtsp://admin:password192.168.1.123/cam/realmonitor?channel1subtype0保存后可以用 API 验证流是否存在返回 JSON 流列表curl http://localhost:1984/api/streams第二步打开浏览器播放页首选http://localhost:1984/webrtc.html?srchall—— WebRTC 播放延迟最低且支持双向对讲加参数mediavideoaudiomicrophone后可用麦克风讲话备选http://localhost:1984/stream.html?srchall—— 通用播放器会自动在 WebRTC/MSE/HLS/MJPEG 之间按浏览器能力选择第三步验证。打开页面后摄像头画面应在 1 秒左右出现在 WebUI 的信息页可以看到这路流当前的生产者producer和消费者consumer连接、编码器和码率。如果页面黑屏而信息页显示流已拉起说明是编解码器不匹配接着做先试过滤器不改编码播放地址后加?videoh264强制从流里选 H264 轨过滤器不够源只有 H265时加第二个来源现场转码streams: hall: - rtsp://admin:password192.168.1.123/cam/realmonitor?channel1subtype0 - ffmpeg:rtsp://admin:password192.168.1.123/cam/realmonitor?channel1subtype0#videoh264#audioopus注意ffmpeg:前缀的第二个来源不会主动拉流只有客户端需要 H264/OPUS 时才被拉起平时不占资源。延迟高、黑屏、没声音的三个排查方向现象浏览器能连但画面黑屏或无声音。常见原因是 H265 或 PCMA 音频浏览器不支持。先用上面?videoh264过滤器排除音频不行就在 FFmpeg 来源里加#audioopusWebRTC或#audioaacMP4/HLS 录像场景。现象麦克风/双向对讲不生效。浏览器只在 HTTPS 页面开放麦克风权限HTTP 下即使页面正常也无法采集音频。用 Nginx 或 Caddy 加一层 HTTPS 反代即可另外摄像头本身要支持双向音频ONVIF Profile T、ISAPI 等项目按协议逐个适配可在 internal/ 各模块 README 中确认。现象延迟有几秒。先确认你走的不是 HLSapi/stream.m3u8再确认播放端不是播放器缓冲。用下面的命令可以直接测 RTSP 输出端的真实延迟它比 VLC 更接近 go2rtc 的水平ffplay -fflags nobuffer -flags low_delay rtsp://192.168.1.123:8554/hall如果 RTSP 端延迟正常而 WebRTC 端延迟高优先检查是否开启了 FFmpeg 转码转码会引入编码延迟能#videocopy就不转码。硬件加速、推流与生态集成三个值得知道的延伸方向硬件加速转码需要#videoh264这类视频转码时追加#hardware参数自动选择硬件编码器或写死#hardwarevaapi支持 vaapi、cuda、videotoolbox 等。Docker 用户可换alexxit/go2rtc:latest-hardware镜像并加--privileged参数详细说明见 internal/ffmpeg/hardware/RTMP 推流在配置里用publish:段把任意流推到 YouTube、Telegram 等 RTMP/RTMPS 地址要求 H264AAC配置示例在 internal/streams/ 的 README 里生态集成go2rtc 已被 Home Assistant2024.11 原生集成和 Frigate作为视频处理核心采用想自己集成可参考 examples/ 里的 Go 客户端示例以及 www/ 中内置的播放器前端webrtc.html、video-rtc.jsWebUI 的网络页会画出所有活动连接的拓扑源、生产者、消费者、编码器和流量排障时比日志直观得多。如果你手头有一批只支持 RTSP 的摄像头想在浏览器低延迟查看或统一转给录像系统go2rtc 值得花一小时搭起来。下一步跑起上面的docker run命令把你第一路rtsp://地址加进配置然后打开webrtc.html?src你的流名看效果。【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考