把 RTSP 摄像头搬进浏览器go2rtc 视频流转发实测【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtcgo2rtc 是一个单二进制视频流转发工具把 RTSP、RTMP、WebRTC、HomeKit 等几十种协议的流源接进来再以 WebRTC、RTSP、HLS、MPEG-TS 等格式分发出去。H.264 源配合 WebRTC 输出时不经过转码延迟可以做到亚秒级。适合手里有一堆 RTSP 摄像头、想让家人在浏览器或手机上直接看或者在 Home Assistant、Frigate 里做集成的人。一条 Docker 命令先让画面亮起来docker pull alexxit/go2rtc docker run -d -p 1984:1984 -p 8554:8554 -p 8555:8555/udp alexxit/go2rtc镜像里自带 FFmpeg 和 Python不用再装任何东西。三个端口各管一摊1984 是 Web 界面和 HTTP API8554 是对外 RTSP 服务8555 是 WebRTC 的信令与媒体端口。打开http://localhost:1984点 Add 输入摄像头的 RTSP 地址几秒后就能看到可播放的链接。不想用 Docker 的话从 Releases 下载对应平台的二进制文件直接运行Linux/macOS 上补一句chmod x即可整个应用没有运行时依赖。配置就一个 go2rtc.yaml所有行为由一个 YAML 文件驱动默认读当前目录下的go2rtc.yaml也可以用启动参数指定别的路径。WebUI 里自带语法检查和补全的编辑器改完立即生效不需要重启进程。最小可用的配置只有 streams 这一段streams: lobby-cam: - rtsp://admin:pass123192.168.1.31:554/Streaming/Channels/101 yard-cam: - rtsp://user:pass456192.168.1.32:554/h264它实际解决哪几件事RTSP 转 WebRTC浏览器看监控的延迟底线RTSP 在浏览器里放不了这是十几年没解决的老问题。go2rtc 把摄像头拉进来后重新封装成 WebRTC 给客户端H.264 源直接转发、不做转码低延迟流媒体的实际体感是亚秒级。同一个源还能同时吐 HLS、MPEG-TS、MP4 给别的设备各取所需。不吐 RTSP 的设备也能接Wyze 走自家 P2P 协议小米、Tapo、HomeKit 各有各的门禁这些消费级摄像头通常给不出标准 RTSP。go2rtc 为每个品牌单独写了协议模块接入时把 URL 前缀换成对应协议即可例如wyze://192.168.1.50:8443?serialXXXX后面接的玩法和 RTSP 源完全一样。编码不匹配时只转码差的那一路常见坑是摄像头视频 H.264、音频 AAC而你的浏览器只认 H.264 Opus。此时给同一个流名下再加一条 ffmpeg 源指定只转音频streams: lobby-cam: - rtsp://admin:pass123192.168.1.31:554/Streaming/Channels/101 - ffmpeg:rtsp://admin:pass123192.168.1.31:554/Streaming/Channels/101#audioopusgo2rtc 会跨所有源自动匹配客户端支持的编码组合视频走 RTSP 直出音频走 ffmpeg 转出的 Opus全程不需要手动指定协商结果。对讲、回推、推流都是同一个接口双工音频对 Tapo、Ring、Wyze、小米、海康 ISAPI、ONVIF T 等设备和协议都做了适配浏览器端可以用麦克风跟摄像头端通话反向还能把任意音源推到支持双工的摄像头上做喊话。想把画面发到直播平台加一条rtmps://推流目标即可。Web 界面里的连接拓扑能看到每条活跃连接的协议、包数和字节数排障时不用再看日志猜。避坑先把这三件事确认掉WebRTC 黑屏九成是 HTTPS 和 8555 端口浏览器规定只有 HTTPS 页面才能调摄像头和麦克风本地测试要么走localhost例外要么上反代。外网访问还要在路由器把 8555 端口的 TCP 和 UDP 都放通缺一个都会时好时坏。H.265 源在浏览器放不出来用 FFmpeg 兜底老浏览器不认 H.265。给流加一条#videoh264的 ffmpeg 源即可转出来纯 CPU 转 1080p 开销不小URL 末尾追加hardwarevaapiIntel/AMD 核显、cudaN 卡或videotoolboxmacOS就能走硬件加速。播放器侧的缓存也要压链路两端都有缓冲。VLC 把 Default Caching Level 调到最低ffplay 拉流加-fflags nobuffer -flags low_delay否则服务端再快也白搭。安全默认值是宽松的要手动收紧1984、8554、8555 三个端口默认对局域网开放同网段的人不加认证就能看到摄像头画面。至少把 API 和 RTSP 绑回本机地址只留 8555 对外api: listen: 127.0.0.1:1984 allow_paths: [/api, /api/streams, /api/frame.jpeg] rtsp: listen: 127.0.0.1:8554更极端的收敛方式是用app.modules限制可加载的模块白名单防止有人通过 API 调用exec、echo这类能执行外部程序的能力。go2rtc 把摄像头视频流转发做成了一个可插拔的模块矩阵输入几十种协议、输出主流格式转码只在必要时经 FFmpeg 发生。模块总表见 internal/README.md外部集成示例在 examples/。它不会替你把烂网络变好但链路本身能做到的速度它基本给到了。【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考 SEO 优化官网定制响应式建站教育培训建站