如果你在搞智能家居、摄像头监控,或者需要把各种奇奇怪怪的摄像头流推到浏览器里,go2rtc 绝对是个让人眼前一亮的工具。它就像个万能转换器,能把 RTSP、RTMP、HTTP 等各种流协议无缝转成 WebRTC、HLS、MJPEG,而且延迟极低。
项目地址
- GitHub:https://github.com/AlexxIT/go2rtc
- Docker Hub:
alexxit/go2rtc - 文档:https://github.com/AlexxIT/go2rtc/wiki
核心亮点
零依赖,开箱即用
- 单个二进制文件,支持 Windows/macOS/Linux/ARM 全平台
- 零配置启动,默认配置就能跑
- 内置 Web 管理界面,端口 1984
协议支持丰富到离谱
输入源支持:
- RTSP/RTSPS(各种 IP 摄像头的标配)
- RTMP(直播推流常用)
- HTTP-FLV/MJPEG/JPEG(网络摄像头)
- FFmpeg(几乎所有媒体格式)
- USB 摄像头(本地设备)
- HomeKit 摄像头(苹果生态)
- 各种品牌专用协议(Tapo、Ring、海康、大华等)
输出协议支持:
- WebRTC(浏览器实时播放,延迟最低)
- RTSP 服务器(标准协议输出)
- HLS(苹果设备友好)
- MSE/MP4(浏览器兼容性好)
- MJPEG(简单粗暴)
智能编解码协商
这是 go2rtc 最牛的地方 —— 它能自动匹配客户端和源之间的最佳编解码方案:
graph TD
A[摄像头 H264+AAC] --> B[go2rtc 核心]
C[摄像头 H265+PCMU] --> B
D[USB 摄像头] --> B
B --> E[浏览器 WebRTC]
B --> F[苹果设备 HLS]
B --> G[RTSP 客户端]
B --> H[录制存储]
B -.-> I[自动转码<br/>H265→H264<br/>PCMU→OPUS]
style B fill:#e1f5fe
style I fill:#fff3e0
快速上手
二进制部署
直接下载对应平台的二进制文件:
# Linux 示例
wget https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64
chmod +x go2rtc_linux_amd64
./go2rtc_linux_amd64
Docker 部署
# 基础运行
docker run -it -p 1984:1984 -p 8554:8554 alexxit/go2rtc
# 带配置文件
docker run -it \
-p 1984:1984 -p 8554:8554 -p 8555:8555/tcp -p 8555:8555/udp \
-v $(pwd)/go2rtc.yaml:/config/go2rtc.yaml \
alexxit/go2rtc
Home Assistant 集成
如果你用 Home Assistant,直接装 Add-on:
- 添加仓库:
https://github.com/AlexxIT/hassio-addons - 安装 go2rtc Add-on
- 配合 WebRTC Camera 集成使用
端侧设备部署指南
go2rtc 的一大优势就是能在各种端侧设备上轻松运行,从树莓派到 NAS,从路由器到工控机,基本上能跑 Linux 的设备都能用。
树莓派部署
树莓派是最常见的端侧设备,go2rtc 在上面跑得很稳:
# 树莓派 4B (ARM64)
wget https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_arm64
chmod +x go2rtc_linux_arm64
sudo mv go2rtc_linux_arm64 /usr/local/bin/go2rtc
# 树莓派 3B/Zero 2W (ARM 32位)
wget https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_arm
chmod +x go2rtc_linux_arm
sudo mv go2rtc_linux_arm /usr/local/bin/go2rtc
# 老款树莓派 Zero/1B (ARMv6)
wget https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_armv6
chmod +x go2rtc_linux_armv6
sudo mv go2rtc_linux_armv6 /usr/local/bin/go2rtc
树莓派家庭监控中心配置:
# /home/pi/go2rtc.yaml - 家庭监控方案
api:
listen: ":1984"
rtsp:
listen: ":8554"
webrtc:
listen: ":8555"
# 树莓派内存有限,减少并发连接
ice_servers:
- urls: [stun:stun.l.google.com:19302]
streams:
# 门口摄像头
front_door: rtsp://admin:pass@192.168.1.101/main
# 客厅摄像头
living_room: rtsp://admin:pass@192.168.1.102/main
# 本地 USB 摄像头
usb_camera: ffmpeg:device?video=/dev/video0&audio=/dev/audio0
# 低分辨率合成视图(节省带宽)
overview:
- ffmpeg:rtsp://192.168.1.101/main#video=scale=320:240
- ffmpeg:rtsp://192.168.1.102/main#video=scale=320:240
log:
level: info
graph LR
A[门口摄像头] --> D[树莓派 4B<br/>go2rtc]
B[客厅摄像头] --> D
C[USB 摄像头] --> D
D --> E[手机推送]
D --> F[Web 监控]
D --> G[NAS 录制]
D --> H[Home Assistant]
style D fill:#ff9800,color:#fff
NAS 设备部署
群晖 NAS (Synology):
# SSH 登录 NAS
ssh admin@your-nas-ip
# 下载对应架构的二进制
# x86_64 NAS
wget https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64 -O /usr/local/bin/go2rtc
# ARM64 NAS (如 DS920+)
wget https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_arm64 -O /usr/local/bin/go2rtc
chmod +x /usr/local/bin/go2rtc
威联通 QNAP: 直接在 App Center 搜索安装 go2rtc,或者用 Container Station 跑 Docker 版本。
NAS 多媒体中心配置:
# 群晖 NAS 多媒体中心方案
api:
listen: ":1984"
# NAS 通常有 Web 管理界面,避免端口冲突
rtsp:
listen: ":8554"
streams:
# 实时监控聚合
live_cameras:
- rtsp://192.168.1.101/live
- rtsp://192.168.1.102/live
- rtsp://192.168.1.103/live
# 历史录像回放(利用 NAS 存储优势)
playback_today: ffmpeg:/volume1/surveillance/$(date +%Y-%m-%d)/camera1.mp4
playback_yesterday: ffmpeg:/volume1/surveillance/$(date -d yesterday +%Y-%m-%d)/camera1.mp4
# 四路画面合成
quad_view:
- ffmpeg:rtsp://192.168.1.101/live#video=scale=640:360
- ffmpeg:rtsp://192.168.1.102/live#video=scale=640:360
- ffmpeg:rtsp://192.168.1.103/live#video=scale=640:360
- ffmpeg:rtsp://192.168.1.104/live#video=scale=640:360
# NAS 本身的监控摄像头
nas_internal: rtsp://localhost:554/camera1
# 利用 NAS 的计算能力做转码
ffmpeg:
# 硬件加速(如果 NAS 支持)
global: "-hwaccel vaapi"
路由器/OpenWrt 部署
对于刷了 OpenWrt 的路由器,go2rtc 也能跑:
# 先确认架构
uname -m
# 常见路由器架构下载
# MIPS 架构(小米路由器等)
wget https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_mipsel
# ARM 架构路由器
wget https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_arm
# 安装到路由器
scp go2rtc_linux_mipsel root@192.168.1.1:/usr/bin/go2rtc
ssh root@192.168.1.1 "chmod +x /usr/bin/go2rtc"
路由器配置要点:
# 路由器资源有限,精简配置
api:
listen: ":1984"
streams:
# 只做协议转换,不做转码
simple_cam: rtsp://192.168.1.100/stream
log:
level: warn # 减少日志输出
工控机/边缘计算设备
工控机通常性能较强,适合做边缘计算网关,承担 AI 分析和云端推流任务:
# 边缘计算网关配置
api:
listen: ":1984"
rtsp:
listen: ":8554"
webrtc:
listen: ":8555"
streams:
# 工厂车间多路监控
workshop_cam_1: rtsp://192.168.10.101/main
workshop_cam_2: rtsp://192.168.10.102/main
workshop_cam_3: rtsp://192.168.10.103/main
# AI 分析后的标注流(结合边缘 AI 推理)
ai_annotated: ffmpeg:rtsp://192.168.10.101/main#overlay=detection_boxes
# 4K 摄像头智能降分辨率
4k_optimized: ffmpeg:rtsp://192.168.10.104/4k#video=scale=1920:1080
# 云端推流(上传到云平台)
cloud_stream:
- rtsp://192.168.10.101/main
- "ffmpeg:{input}#f=flv#rtmp://cloud-server.com/live/factory1"
# 多源合并监控大屏
control_room_view:
- ffmpeg:rtsp://192.168.10.101/main#video=scale=640:360
- ffmpeg:rtsp://192.168.10.102/main#video=scale=640:360
- ffmpeg:rtsp://192.168.10.103/main#video=scale=640:360
- ffmpeg:rtsp://192.168.10.104/main#video=scale=640:360
# 硬件加速配置(利用 GPU 做 AI 推理和转码)
ffmpeg:
global: "-hwaccel cuda -hwaccel_device 0"
端侧设备架构图
graph TB
subgraph "端侧设备生态"
A[树莓派<br/>ARM/ARM64] --> E[go2rtc 核心]
B[NAS 设备<br/>x86/ARM] --> E
C[OpenWrt 路由器<br/>MIPS/ARM] --> E
D[工控机<br/>x86_64] --> E
end
subgraph "摄像头接入"
F[USB 摄像头] --> E
G[网络摄像头] --> E
H[无线摄像头] --> E
end
subgraph "客户端访问"
E --> I[手机 App]
E --> J[浏览器]
E --> K[NVR 系统]
E --> L[云端推流]
end
style E fill:#4caf50,color:#fff
style A fill:#ff9800,color:#fff
style B fill:#2196f3,color:#fff
style C fill:#9c27b0,color:#fff
style D fill:#607d8b,color:#fff
端侧部署最佳实践
性能调优:
- 树莓派:关闭不必要的转码,优先用硬件编解码
- NAS:利用存储优势做录像回放和多路聚合
- 路由器:只做协议转换,避免 CPU 密集操作
- 工控机:充分利用硬件加速,支持多路高清
网络优化:
# 端侧设备网络配置
webrtc:
listen: ":8555"
# 端侧设备通常在 NAT 后面,配置 STUN
ice_servers:
- urls: [stun:stun.l.google.com:19302]
- urls: [stun:stun1.l.google.com:19302]
# 如果有公网 IP,配置端口映射
candidates:
- 192.168.1.100:8555 # 内网 IP
- your-public-ip:8555 # 公网 IP(如果有)
自启动配置:
# systemd 服务配置
sudo tee /etc/systemd/system/go2rtc.service << EOF
[Unit]
Description=go2rtc streaming server
After=network.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi
ExecStart=/usr/local/bin/go2rtc -config /home/pi/go2rtc.yaml
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable go2rtc
sudo systemctl start go2rtc
配置详解
go2rtc 的配置文件 go2rtc.yaml 结构很清晰:
# 流配置 - 核心部分
streams:
# 海康摄像头,支持双向音频
hikvision_cam:
- rtsp://admin:password@192.168.1.100/Streaming/Channels/101
- rtsp://admin:password@192.168.1.100/Streaming/Channels/102#backchannel=0
# 大华门铃,ONVIF 协议
dahua_doorbell:
- rtsp://admin:password@192.168.1.101/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif
# TP-Link Tapo 摄像头
tapo_cam: tapo://192.168.1.102
# USB 摄像头
usb_camera: ffmpeg:device?video=0&audio=0
# 多源混合(主流 + 音频转码)
mixed_stream:
- rtsp://192.168.1.103/main
- ffmpeg:rtsp://192.168.1.103/sub#audio=opus
# API 配置
api:
listen: ":1984"
# 可选:设置用户名密码
# username: admin
# password: secret
# RTSP 服务器配置
rtsp:
listen: ":8554"
# 可选:设置认证
# username: rtsp_user
# password: rtsp_pass
# WebRTC 配置
webrtc:
listen: ":8555"
# 可选:ICE 服务器配置
# ice_servers:
# - urls: [stun:stun.l.google.com:19302]
# 日志配置
log:
level: info
# 可选:输出到文件
# output: go2rtc.log
实际应用场景
智能家居统一接入
go2rtc 最大的价值就是能把各种品牌的摄像头统一管理:
graph LR
A[海康摄像头] --> D[go2rtc]
B[大华门铃] --> D
C[Tapo 摄像头] --> D
D --> E[Home Assistant]
D --> F[手机 App]
D --> G[浏览器监控]
style D fill:#4caf50,color:#fff
AI 监控录制系统
配合 Frigate 等 AI 系统做智能识别:
# Frigate 配置示例
cameras:
front_door:
ffmpeg:
inputs:
- path: rtsp://localhost:8554/front_door_cam
roles:
- detect
- record
远程访问解决方案
通过 ngrok 实现内网穿透,随时随地访问家里的摄像头:
ngrok:
command: ngrok tcp 8554 --authtoken YOUR_TOKEN
streams:
home_cameras:
- rtsp://192.168.1.101/main
- rtsp://192.168.1.102/main
编解码适配策略
go2rtc 的编解码协商是真的智能,它会根据客户端能力自动选择最佳方案:
浏览器兼容性
| 浏览器 | WebRTC 支持 | MSE 支持 | HLS 支持 |
|---|---|---|---|
| Chrome | H264, OPUS, PCMU | H264, H265*, AAC | ❌ |
| Firefox | H264, OPUS, PCMU | H264, AAC | ❌ |
| Safari | H264, H265*, OPUS | H264, H265, AAC | ✅ |
| iOS Safari | H264, H265*, OPUS | ❌ | ✅ |
*需要手动开启实验性功能
自动转码规则
flowchart TD
A[摄像头音频 PCMU/PCMA] --> B{客户端支持?}
B -->|WebRTC| C[重采样到 8000Hz]
B -->|MSE/HLS| D[转换为 FLAC]
E[摄像头视频 H265] --> F{客户端支持?}
F -->|支持| G[直接传输]
F -->|不支持| H[FFmpeg 转 H264]
style C fill:#e8f5e8
style D fill:#e8f5e8
style G fill:#e8f5e8
style H fill:#fff3e0
性能优化小贴士
降低延迟
- WebRTC 延迟最低(通常 < 500ms)
- RTSP 直连次之
- HLS 延迟最高(3-10 秒)
带宽优化
streams:
low_bandwidth_cam:
- rtsp://cam/main#video=h264#audio=pcmu
- ffmpeg:rtsp://cam/sub#video=scale=640:480#audio=opus
多客户端支持
go2rtc 支持同一流多个客户端同时观看,不会重复拉流,很省带宽。
双向音频配置
支持双向音频的摄像头可以这样配置:
streams:
doorbell:
# 主流(视频 + 音频输入)
- rtsp://admin:pass@192.168.1.100/main
# 音频回传通道
- rtsp://admin:pass@192.168.1.100/backchannel#backchannel=1
浏览器端通过 WebRTC 就能实现对讲功能。
故障排查
常见问题
- 摄像头连不上:检查 RTSP URL 格式,用户名密码
- 浏览器播放不了:检查 HTTPS 环境,编解码支持
- 延迟太高:优先用 WebRTC,检查网络状况
- 音频没声音:检查编解码匹配,考虑转码
调试技巧
log:
level: debug # 开启详细日志
streams:
debug_cam:
- rtsp://cam_url
- "ffmpeg:{input}#loglevel=verbose" # FFmpeg 详细日志
小结
go2rtc 真的是个宝藏项目,它解决了流媒体领域一个很现实的痛点:协议碎片化。各家摄像头厂商都有自己的协议实现,客户端支持也参差不齐,go2rtc 就像个万能翻译官,让这些设备能在统一的平台上协同工作。
特别是它的多源编解码协商机制,真的很聪明。你不用操心什么 H264、H265、OPUS、AAC 这些技术细节,它会自动帮你搞定最佳的传输方案。
如果你在做智能家居、监控系统,或者就是想把摄像头画面弄到浏览器里看,go2rtc 绝对值得试试。配置简单,功能强大,而且还在持续更新,社区也很活跃。
标签
版权声明
本文由 WebRTC.link 创作,采用 CC BY-NC-SA 4.0 许可协议。本站转载文章会注明来源以及作者。如果您需要转载,请注明出处以及作者。



评论区
Giscus评论由 Giscus 驱动,基于 GitHub Discussions