使用 GStreamer WebRTC 接收 Reachy Mini 的实时视频和音频流。
| 平台 | 支持情况 |
|---|---|
| PC | ✅ 支持 |
| Reachy Mini | ❌ 不适用 |
此 demo 在 PC 上运行,接收来自 Reachy Mini 的视频和音频流。
- 实时视频流接收 (来自 Reachy Mini 摄像头)
- 音频流接收 (来自 Reachy Mini 麦克风)
- 自动延迟优化 (50ms 低延迟配置)
- FPS 显示和延迟监控
- 操作系统: Linux (Ubuntu 20.04/22.04), macOS, Windows (部分支持)
- Python: 3.7+
- 网络: 与 Reachy Mini 在同一局域网
此演示需要安装 GStreamer 和 WebRTC 插件。
基础 GStreamer 安装:
sudo apt-get update
sudo apt-get install -y \
libgstreamer-plugins-bad1.0-dev \
libgstreamer-plugins-base1.0-dev \
libgstreamer1.0-dev \
libglib2.0-dev \
python3-gi \
python3-gi-cairo \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-alsaUbuntu 22.04 需要使用特定版本的 gst-plugins-rs:
# 克隆 GStreamer Rust 插件仓库
git clone https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
cd gst-plugins-rs
# 切换到 0.11.3 版本 (兼容 GStreamer 1.20)
git checkout 0.11.3
# 修复 time 库 Bug
cargo update -p time
# 安装构建工具
cargo install cargo-c
# 创建安装目录
sudo mkdir -p /opt/gst-plugins-rs
sudo chown $USER /opt/gst-plugins-rs
# 编译并安装 WebRTC 插件
cargo cinstall -p gst-plugin-webrtc --prefix=/opt/gst-plugins-rs --release
# 添加到环境变量
echo 'export GST_PLUGIN_PATH=/opt/gst-plugins-rs/lib/x86_64-linux-gnu:$GST_PLUGIN_PATH' >> ~/.bashrc
source ~/.bashrc# 克隆仓库
git clone https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
cd gst-plugins-rs
git checkout 0.14.1
# 安装构建工具
cargo install cargo-c
# 编译安装
sudo mkdir -p /opt/gst-plugins-rs
sudo chown $USER /opt/gst-plugins-rs
cargo cinstall -p gst-plugin-webrtc --prefix=/opt/gst-plugins-rs --release
# 添加到环境变量
echo 'export GST_PLUGIN_PATH=/opt/gst-plugins-rs/lib/x86_64-linux-gnu:$GST_PLUGIN_PATH' >> ~/.bashrc
source ~/.bashrcbrew install gstreamer libnice-gstreamer
⚠️ Windows 部分支持,请参考 GSTREAMER.md
pip install 'reachy-mini[gstreamer]'
# 或使用 uv
uv pip install 'reachy-mini[gstreamer]'# 连接到本地 Reachy Mini (默认 127.0.0.1:8443)
python3 05.py
# 连接到指定 IP 的 Reachy Mini
python3 05.py --signaling-host 10.42.0.75
# 完整配置
python3 05.py -s 10.42.0.75 -p 8443| 参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
--signaling-host |
-s |
127.0.0.1 |
Reachy Mini 的 IP 地址 |
--signaling-port |
-p |
8443 |
信令服务器端口 |
--peer-name |
-n |
reachymini |
对等体名称 |
┌─────────────────┐ WebRTC ┌──────────────────┐
│ Reachy Mini │ ◄─────────────────────► │ Your PC │
│ (Producer) │ Signaling (ws://) │ (Consumer) │
│ │ │ │
│ ┌───────────┐ │ │ ┌────────────┐ │
│ │ Camera │ │ Video/Audio Stream │ │ Display │ │
│ │ Mic │ │ ──────────────────────► │ │ Speaker │ │
│ └───────────┘ │ │ └────────────┘ │
└─────────────────┘ └──────────────────┘
- 连接阶段: 通过 WebSocket 信令服务器与 Reachy Mini 建立 WebRTC 连接
- 协商阶段: 交换 SDP (Session Description Protocol) 和 ICE 候选
- 流传输: 接收 H.264 视频流和 Opus 音频流
- 解码显示: GStreamer 自动解码并显示视频/播放音频
原因: WebRTC 插件未正确安装
解决:
# 检查插件是否安装
gst-inspect-1.0 webrtcsrc
# 如果报错,重新安装 WebRTC 插件 (参考上方安装指南)原因: 未安装 reachy-mini 的 gstreamer 额外依赖
解决:
pip install 'reachy-mini[gstreamer]'原因: 无法连接到 Reachy Mini
解决:
- 检查 Reachy Mini 是否开机
- 检查网络连接
- 确认 IP 地址正确
- 检查防火墙设置
原因: 音频输出设备配置问题
解决:
# 测试音频设备
gst-launch-1.0 audiotestsrc ! autoaudiosink
# 检查 ALSA 设备
aplay -l原因: 网络抖动缓冲设置过大
解决: 代码已将延迟设置为 50ms,如需进一步调整:
# 在 05.py 中修改
webrtcbin.set_property("latency", 30) # 降低到 30ms# 检查版本
gst-launch-1.0 --version
# 测试视频输出
gst-launch-1.0 videotestsrc ! autovideosink
# 测试音频输出
gst-launch-1.0 audiotestsrc ! autoaudiosink
# 验证 WebRTC 插件
gst-inspect-1.0 webrtcsrc- 编码: H.264 (硬件加速)
- 分辨率: 640x480 (可配置)
- 帧率: 30 FPS
- 编码: Opus
- 采样率: 48 kHz
- 通道: 单声道
- 信令: WebSocket (ws://IP:8443)
- 传输: WebRTC RTP/RTCP
- NAT 穿透: ICE, STUN
MIT License