go2rtc教程:全能流媒体转换神器,统一管理所有摄像头协议

RTC相关项目 精选 8 分钟 |
go2rtc教程:全能流媒体转换神器,统一管理所有摄像头协议

如果你在搞智能家居、摄像头监控,或者需要把各种奇奇怪怪的摄像头流推到浏览器里,go2rtc 绝对是个让人眼前一亮的工具。它就像个万能转换器,能把 RTSP、RTMP、HTTP 等各种流协议无缝转成 WebRTC、HLS、MJPEG,而且延迟极低。

项目地址

核心亮点

零依赖,开箱即用

  • 单个二进制文件,支持 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:

  1. 添加仓库:https://github.com/AlexxIT/hassio-addons
  2. 安装 go2rtc Add-on
  3. 配合 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 支持
ChromeH264, OPUS, PCMUH264, H265*, AAC❌
FirefoxH264, OPUS, PCMUH264, AAC❌
SafariH264, H265*, OPUSH264, H265, AAC✅
iOS SafariH264, 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 就能实现对讲功能。

故障排查

常见问题

  1. 摄像头连不上:检查 RTSP URL 格式,用户名密码
  2. 浏览器播放不了:检查 HTTPS 环境,编解码支持
  3. 延迟太高:优先用 WebRTC,检查网络状况
  4. 音频没声音:检查编解码匹配,考虑转码

调试技巧

log:
  level: debug  # 开启详细日志
  
streams:
  debug_cam:
    - rtsp://cam_url
    - "ffmpeg:{input}#loglevel=verbose"  # FFmpeg 详细日志

小结

go2rtc 真的是个宝藏项目,它解决了流媒体领域一个很现实的痛点:协议碎片化。各家摄像头厂商都有自己的协议实现,客户端支持也参差不齐,go2rtc 就像个万能翻译官,让这些设备能在统一的平台上协同工作。

特别是它的多源编解码协商机制,真的很聪明。你不用操心什么 H264、H265、OPUS、AAC 这些技术细节,它会自动帮你搞定最佳的传输方案。

如果你在做智能家居、监控系统,或者就是想把摄像头画面弄到浏览器里看,go2rtc 绝对值得试试。配置简单,功能强大,而且还在持续更新,社区也很活跃。

标签

#go2rtc #RTSP转WebRTC #摄像头流媒体 #智能家居 #树莓派 #NAS部署 #流媒体转换 #HomeKit

版权声明

本文由 WebRTC.link 创作,采用 CC BY-NC-SA 4.0 许可协议。本站转载文章会注明来源以及作者。如果您需要转载,请注明出处以及作者。

评论区

Giscus

评论由 Giscus 驱动,基于 GitHub Discussions

相关文章

探索更多相关内容,深入了解 WebRTC 技术的各个方面

演示 Demo

LIVE
•

基础摄像头访问

展示如何使用 getUserMedia API 获取摄像头和麦克风

媒体获取 体验
•

PTZ 摄像头控制

控制支持 PTZ 功能的摄像头进行平移、倾斜和缩放

媒体获取 体验
•

屏幕共享

使用 getDisplayMedia API 进行屏幕共享

媒体获取 体验