媒体架构
了解Reachy Mini的媒体架构对于有效利用其音频和视觉能力至关重要。
统一架构
守护进程始终通过GstMediaServer(media_server.py)管理摄像头和音频硬件,无论您使用的是Reachy Mini(无线版)还是Reachy Mini Lite。这种统一意味着两种型号的工作方式相同:
- 守护进程拥有物理摄像头和音频设备。
- 本地客户端(同一台机器)从本地IPC端点读取摄像头帧,并直接通过GStreamer打开音频设备 —
LOCAL后端。 - 远程客户端通过WebRTC从守护进程流传输摄像头+音频 —
WEBRTC后端。 - SDK根据守护进程的IPC端点是否可访问自动检测使用哪个后端。
守护进程端
守护进程自动启动其媒体管道,除非传递了--no-media标志。它:
- 打开摄像头(平台感知:v4l2、libcamera、DirectShow、AVFoundation或用于仿真的UDP)。
- 打开音频设备(平台感知:PulseAudio、ALSA、WASAPI、CoreAudio)。
- 将两者输入WebRTC服务器(
webrtcsink)用于远程流传输。 - 通过本地IPC端点(Linux/macOS上的
unixfdsink,Windows上的win32ipcvideosink)暴露原始摄像头帧。
客户端
SDK的MediaManager自动选择后端:
- LOCAL:当客户端与守护进程在同一台机器上运行时使用。从IPC读取摄像头帧,并通过GStreamer直接打开音频设备。无编码/解码开销。
- WEBRTC:当客户端是远程时使用。通过WebRTC从守护进程流传输摄像头+音频。
- NO_MEDIA:跳过所有媒体初始化(无头操作)。
Web访问
由于WebRTC,音频和视频流也可以直接从Web浏览器访问。例如,桌面应用使用此功能。
禁用媒体/直接硬件访问
默认情况下,守护进程拥有摄像头和音频设备。如果您需要直接访问硬件 — 例如使用OpenCV、sounddevice或自定义视觉管道 — 您可以停用内置媒体管理器:
from reachy_mini import ReachyMini
with ReachyMini(media_backend="no_media") as mini:
# 守护进程已释放摄像头和音频硬件。
# 直接使用OpenCV、sounddevice或任何其他库。
import cv2
cap = cv2.VideoCapture(0)
ret, frame = cap.read()
cap.release()
# 机器人控制仍然正常工作。
mini.goto_target(antennas=[0.3, -0.3], duration=0.5)
# 退出时,守护进程自动重新获取硬件。
当传递media_backend="no_media"时,SDK:
- 请求守护进程释放摄像头和音频设备(停止GStreamer管道)。
- 将本地
MediaManager设置为NO_MEDIA(SDK中无摄像头/音频)。 - 在上下文管理器退出时(
__exit__),告诉守护进程自动重新获取硬件。
您也可以随时手动调用release_media()和acquire_media():
mini = ReachyMini()
# ... 使用内置媒体管理器 ...
frame = mini.media.get_frame()
# 切换到直接访问
mini.release_media()
# ... 使用OpenCV、sounddevice等 ...
# 切换回SDK媒体管理器
mini.acquire_media()
frame = mini.media.get_frame()
⚠️ 注意: 两种方法都是幂等的 — 调用两次
release_media()是安全的。
有关使用OpenCV和sounddevice的完整示例,请参阅自定义媒体管理器。
高级控制
请参阅专用页面来微调Reachy Mini和Reachy Mini Lite的摄像头和麦克风参数。


