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 进行屏幕共享

媒体获取 体验