go2rtc 零基础入门教程 - 开源流媒体服务器搭建指南
7 min read
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
支持多种架构,包括 amd64
、386
、arm64
和 arm
。此容器提供与 Home Assistant 插件相同的功能,但设计为独立于 Home Assistant 运行。它预装了 FFmpeg、ngrok 和 Python。
Home Assistant 插件安装
- 安装插件:
- 设置 > 插件 > 添加 > 仓库 > 添加
https://github.com/AlexxIT/hassio-addons
- go2rtc > 安装 > 启动
- 设置 > 插件 > 添加 > 仓库 > 添加
- 设置集成
基本配置
默认情况下,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
使用建议
- 摄像头选择建议:
- Dahua/大华 - 协议实现最标准,设置丰富,流质量高
- Hikvision/海康 - 功能丰富但偏重私有协议
- Reolink - 部分型号RTSP实现较差,建议使用RTMP
- TP-Link - 同时连接数有限,可能存在丢包
- 性能优化建议:
- 尽量使用原生编码,避免不必要的转码
- 对于性能受限设备,建议使用子码流
- 使用RTSP时开启TCP模式可以提高稳定性
- 安全建议:
- 限制API和RTSP只允许本地访问
- WebRTC对外开放时建议启用认证
- 使用HTTPS可以获得更好的安全性
常见问题排查
- 流无法播放:
- 检查网络连接和防火墙设置
- 确认摄像头URL和认证信息正确
- 查看日志确认具体错误信息
- 画面卡顿:
- 检查网络带宽是否足够
- 尝试降低视频码率或分辨率
- 考虑使用子码流
- 音频问题:
- 确认摄像头是否支持音频
- 检查音频编码格式是否兼容
- 双向音频需要确认backchannel配置