Tech Explorer Logo

go2rtc 零基础入门教程 - 开源流媒体服务器搭建指南

7 min read
Cover image for go2rtc 零基础入门教程 - 开源流媒体服务器搭建指南

go2rtc 介绍

go2rtc 是一个终极摄像头流媒体应用程序,支持 RTSP、WebRTC、HomeKit、FFmpeg、RTMP 等协议。

主要特点:

  • 零依赖和零配置的小型应用程序,支持所有操作系统(Windows、macOS、Linux、ARM)
  • 支持多种协议的零延迟流媒体(最低可能的流延迟)
  • 支持从 RTSP、RTMP、DVRIP、HTTP(FLV/MJPEG/JPEG/TS)、USB 摄像头等多种来源进行流媒体传输
  • 支持任何 FFmpeg 支持的来源
  • 支持流媒体到 RTSP、WebRTC、MSE/MP4、HomeKit、HLS 或 MJPEG
  • 可以将任何来源发布到流行的流媒体服务(YouTube、Telegram 等)
  • 世界上第一个支持从 HomeKit 摄像头进行流媒体传输的项目
  • 支持在浏览器中使用 H265 进行 WebRTC 传输(仅 Safari)
  • 通过 FFmpeg 对不支持的编解码器进行实时转码
  • 在某些摄像头上播放音频文件和实时流
  • 多来源双向编解码器协商
    • 将不同来源的轨道混合到单个流中
    • 自动匹配客户端支持的编解码器
    • 某些摄像头支持双向音频
  • 通过 ngrok 从私有网络进行流媒体传输
  • 可以集成到任何智能家居平台或作为独立应用程序使用

快速开始

二进制安装

最新发布下载适合你操作系统的二进制文件:

  • go2rtc_win64.zip - Windows 10+ 64位
  • go2rtc_win32.zip - Windows 7+ 32位
  • go2rtc_win_arm64.zip - Windows ARM 64位
  • go2rtc_linux_amd64 - Linux 64位
  • go2rtc_linux_i386 - Linux 32位
  • go2rtc_linux_arm64 - Linux ARM 64位(如 Raspberry 64位系统)
  • go2rtc_linux_arm - Linux ARM 32位(如 Raspberry 32位系统)
  • go2rtc_linux_armv6 - Linux ARMv6(适用于老的 Raspberry 1 和 Zero)
  • go2rtc_linux_mipsel - Linux MIPS(如小米网关3、Wyze摄像头)
  • go2rtc_mac_amd64.zip - macOS 10.13+ Intel 64位
  • go2rtc_mac_arm64.zip - macOS ARM 64位

在 Linux 和 Mac 上不要忘记修改权限 chmod +x go2rtc_xxx_xxx

Docker 安装

Docker 容器 alexxit/go2rtc 支持多种架构,包括 amd64386arm64arm。此容器提供与 Home Assistant 插件相同的功能,但设计为独立于 Home Assistant 运行。它预装了 FFmpeg、ngrok 和 Python。

Home Assistant 插件安装

  1. 安装插件:
    • 设置 > 插件 > 添加 > 仓库 > 添加 https://github.com/AlexxIT/hassio-addons
    • go2rtc > 安装 > 启动
  2. 设置集成

基本配置

默认情况下,go2rtc 将在当前工作目录中搜索 go2rtc.yaml:

  • api 服务器将在默认的 1984 端口 (TCP)上启动
  • rtsp 服务器将在默认的 8554 端口 (TCP)上启动
  • webrtc 将使用 8555 端口 (TCP/UDP)进行连接
  • ffmpeg 将使用默认的转码选项

可用模块:

  • streams - 流配置
  • api - HTTP API(对 WebRTC 支持很重要)
  • rtsp - RTSP 服务器(对 FFmpeg 支持很重要)
  • webrtc - WebRTC 服务器
  • mp4 - MSE、MP4 流和 MP4 快照服务器
  • hls - HLS TS 或 fMP4 流服务器
  • mjpeg - MJPEG 服务器
  • ffmpeg - FFmpeg 集成
  • ngrok - ngrok 集成(私有网络的外部访问)
  • hass - Home Assistant 集成
  • log - 日志配置

流配置示例

RTSP 流配置

   streams:
  # 基础 RTSP 流配置
  camera1: rtsp://admin:[email protected]:554/stream1
  
  # 多路流配置(主码流+子码流)
  dahua_camera:
    - rtsp://admin:[email protected]/cam/realmonitor?channel=1&subtype=0 # 主码流
    - rtsp://admin:[email protected]/cam/realmonitor?channel=1&subtype=1 # 子码流
  
  # 带双向音频的配置
  doorbell:
    - rtsp://admin:[email protected]:554/cam/realmonitor?channel=1&subtype=0#backchannel=1

FFmpeg 转码配置

   streams:
  # 视频旋转90度
  rotate_camera: ffmpeg:rtsp://camera_ip/stream#video=h264#rotate=90
  
  # 音频转码为AAC
  audio_transcode: ffmpeg:rtsp://camera_ip/stream#audio=aac
  
  # 同时转码视频和音频
  full_transcode: ffmpeg:rtsp://camera_ip/stream#video=h264#audio=aac#scale=1280:720

WebRTC 配置

   webrtc:
  # 允许外部访问
  listen: :8555
  
  # 配置STUN服务器
  candidates:
    - stun:stun.l.google.com:19302
    
  # 启用调试日志
  debug: true

安全配置

   # 限制API和RTSP只允许本地访问
api:
  listen: 127.0.0.1:1984
  # 添加基本认证
  login: admin
  password: your_password

rtsp:
  listen: 127.0.0.1:8554

# WebRTC需要外部访问
webrtc:
  listen: :8555

日志配置

   log:
  # 全局日志级别
  level: info
  
  # 单独模块日志级别
  api: debug
  webrtc: warn
  rtsp: error
  streams: debug

完整配置示例

   # 流配置
streams:
  # RTSP摄像头
  camera1: rtsp://admin:[email protected]:554/stream
  
  # 带转码的摄像头
  camera2: ffmpeg:rtsp://192.168.1.124:554/stream#video=h264#audio=aac
  
  # 双向音频门铃
  doorbell:
    - rtsp://admin:[email protected]:554/stream#backchannel=1

# API配置  
api:
  listen: 127.0.0.1:1984
  login: admin
  password: password123

# WebRTC配置
webrtc:
  listen: :8555
  candidates:
    - stun:stun.l.google.com:19302

# 日志配置    
log:
  level: info
  webrtc: debug

使用建议

  1. 摄像头选择建议:
  • Dahua/大华 - 协议实现最标准,设置丰富,流质量高
  • Hikvision/海康 - 功能丰富但偏重私有协议
  • Reolink - 部分型号RTSP实现较差,建议使用RTMP
  • TP-Link - 同时连接数有限,可能存在丢包
  1. 性能优化建议:
  • 尽量使用原生编码,避免不必要的转码
  • 对于性能受限设备,建议使用子码流
  • 使用RTSP时开启TCP模式可以提高稳定性
  1. 安全建议:
  • 限制API和RTSP只允许本地访问
  • WebRTC对外开放时建议启用认证
  • 使用HTTPS可以获得更好的安全性

常见问题排查

  1. 流无法播放:
  • 检查网络连接和防火墙设置
  • 确认摄像头URL和认证信息正确
  • 查看日志确认具体错误信息
  1. 画面卡顿:
  • 检查网络带宽是否足够
  • 尝试降低视频码率或分辨率
  • 考虑使用子码流
  1. 音频问题:
  • 确认摄像头是否支持音频
  • 检查音频编码格式是否兼容
  • 双向音频需要确认backchannel配置