go2rtc是一个功能强大的视频流媒体协议转换工具,核心功能是将传统监控摄像头的RTSP、RTMP等协议,实时转换为现代浏览器和应用程序原生支持的WebRTC、MSE/MP4等格式,从而解决传统监控视频在Web端延迟高、依赖插件的问题。
下面的表格概括了它的核心特性与工作原理,可以帮助你快速建立整体认知:
| 特性维度 | 具体说明 |
|---|---|
| 核心功能 | 协议转换枢纽:将多种输入源(如RTSP摄像头)实时转换为WebRTC、MSE等现代格式。 |
| 核心优势 | 零依赖与跨平台:单文件二进制程序,可在Windows、macOS、Linux及树莓派等ARM设备上直接运行。 |
| 性能表现 | 超低延迟:通过WebRTC等技术,实现视频流的毫秒级(通常低于500ms)传输。 |
| 扩展能力 | 多功能集成:支持HomeKit、双向音频、FFmpeg硬件转码,可作为智能家居的媒体中心。 |
🚀 快速开始:三种部署方式
你可以根据自己的技术偏好和运行环境,选择最合适的一种方式来安装和运行go2rtc。
| 部署方式 | 适用场景 | 核心命令/步骤 |
|---|---|---|
| 1. 二进制文件 | 快速测试、物理机或虚拟机直接部署 | 1. 从项目发布页下载对应系统的文件。 2. 给予执行权限: chmod +x go2rtc_linux_amd64。3. 运行: ./go2rtc_linux_amd64。 |
| 2. Docker | 首选方式,环境隔离、易于管理 | docker run -d --name go2rtc --network host -v ~/go2rtc:/config alexxit/go2rtc。关键点: --network host模式对WebRTC的UDP通信至关重要。 |
| 3. Home Assistant | HA用户,深度集成 | 通过HACS商店安装“WebRTC Camera”集成组件,它会自动管理go2rtc实例。 |
运行成功后,默认的Web管理界面地址是http://你的服务器IP:1984。
⚙️ 核心配置详解
服务启动后,需要配置视频流源。配置文件默认为go2rtc.yaml。下面是一个配置示例及关键参数说明:
# go2rtc.yaml 基础配置示例streams:# 1. 基础RTSP摄像头living_room:-"rtsp://admin:password@192.168.1.100/stream"# 2. 使用FFmpeg处理不稳定或特殊编码的流backyard:-"ffmpeg:rtsp://192.168.1.101/live#video=h264"# 3. 本地USB摄像头usb_cam:-"ffmpeg:v4l2:/dev/video0#video=h264"# 4. 启用双向音频的门铃摄像头(需摄像头支持)doorbell:-"rtsp://192.168.1.102/ch0#backchannel=1"# 服务器模块配置api:listen:":1984"# Web管理界面和API端口rtsp:listen:":8554"# RTSP服务器端口webrtc:listen:":8555"# WebRTC信令端口candidates:-"你的公网IP或域名:8555"# 公网访问必须设置-"stun:stun.l.google.com:19302"# 帮助内网穿透配置要点:
- 流名称:
living_room是自定义标识,用于在API和Web界面中访问该流。 - 源类型:支持
rtsp://、ffmpeg:等多种前缀,用于指定协议。 - FFmpeg前缀:使用
ffmpeg:可以处理不稳定的流或进行转码,例如将H.265转为H.264。 - WebRTC公网访问:要让外网设备通过WebRTC观看,必须在
webrtc.candidates中正确配置公网IP或域名。
🔌 如何使用视频流
配置并重启服务后,你可以通过以下方式使用这些视频流:
| 使用场景 | 访问方式 | 示例/说明 |
|---|---|---|
| 通过Web界面 | 浏览器 | 访问http://服务器IP:1984,点击配置的流名称即可实时播放。 |
| 通过WebRTC(网页) | 网页<video>标签 | 适用于集成到自定义网页。需引入video-rtc.js并调用API。 |
| 通过RTSP | VLC/FFmpeg等播放器 | 地址格式:rtsp://服务器IP:8554/流名称(如rtsp://192.168.1.10:8554/living_room)。 |
| 通过API | 编程调用 | 获取所有流:curl http://localhost:1984/api/streams。 |
💡 高级功能与技巧
- 双向音频:适用于智能门铃对讲。需要在流配置末尾添加
#backchannel=1,并确保摄像头支持(如ONVIF Profile T)。 - 硬件加速转码:在高性能设备上降低CPU占用。在Docker中使用
alexxit/go2rtc:latest-hardware镜像,并在配置中指定硬件编解码器。 - 安全与公网暴露:不建议直接将管理界面暴露公网。如果必须,请务必在
api部分设置用户名密码认证。
🔧 常见问题排查
- WebRTC无法在外网连接:确认
webrtc.candidates配置了公网IP;在路由器设置端口转发(TCP/UDP 8555)。 - 视频流卡顿或无法播放:尝试在RTSP URL前添加
ffmpeg:前缀,让FFmpeg代理拉流以增强稳定性。 - CPU占用过高:如果使用了
ffmpeg:转码,考虑启用硬件加速,或检查原始流是否是高码率的H.265格式。
总的来说,go2rtc是一个非常实用的流媒体网关。你可以从Docker部署和配置一两个摄像头开始体验。如果需要更详细的配置说明,例如所有的流媒体源类型或高级API用法,我可以为你进一步介绍。