无人仓储的最终状态是「人不在仓库,但能看到每台 AGV 的运行状态」。当 AGV 在巷道中卡住或发生路径冲突时,远程操作员需要立刻看到现场画面并接管控制,延迟超过 1 秒,可能已经撞上了货架。本文以即构科技(ZEGO)的方案为例拆解无人仓储的实时音视频(RTC) 架构。

一、无人仓储的技术需求
| 场景需求 | 核心指标 | 难点 |
|---|---|---|
| AGV 车载画面回传 | 端到端延迟 < 300ms | AGV 在仓库内通过 Wi-Fi 连接,信号受货架遮挡 |
| 远程干预 | 远程操作员看到实况后下发指令 < 200ms | AGV 紧急停止指令必须在 200ms 内到达 |
| 多机监控 | 同时查看 10-20 台 AGV 画面 | 仓库面积大,AGV 数量多,调度中心需要全局视图 |
| 异常画面录制 | 触发式录制,异常事件前后 30 秒 | AGV 碰撞后需要回放确认原因 |
| 低码率保底 | 360p @ 200kbps 在弱 Wi-Fi 下维持连接 | 仓库内部 Wi-Fi 信号受金属货架严重干扰 |
二、核心架构
┌──────────────────────────────────────────────────────┐
│ 业务层:仓储管理系统 │
│ AGV 调度 · 任务分配 · 异常告警 · 运维分析 │
├──────────────────────────────────────────────────────┤
│ RTC 音视频传输层 │
│ AGV 推流·远程干预·异常联动·多机管理 │
├──────────────┬──────────────────┬────────────────────┤
│ AGV 端 │ 传感器端 │ 远程调度中心 │
│ 推流画面回传│ 状态信息 SEI │ 拉流 20 台 AGV │
│ `自定义采集`│ `SEI 嵌入` │ `自定义渲染` │
│ `低码率` │ `事件触发录制` │ `多房间` │
├──────────────┴──────────────────┴────────────────────┤
│ 基础设施层 │
│ SD-RTN™ · 工业 Wi-Fi · 边缘计算 · 云端录制 │
三、核心技术实现
3.1 AGV 车载摄像头自定义视频采集
AGV 通常搭载 USB 或 MIPI 摄像头,通过嵌入式计算板(如 Jetson Nano/RK3588)采集画面:
// AGV 端:接收摄像头数据并推流
// 1. 开启自定义视频采集
engine->enableCustomVideoCapture(true, ZEGO_PUBLISH_CHANNEL_MAIN);
// 2. 从摄像头驱动获取到一帧数据后发送
// AGV 摄像头通常为 YUYV 或 MJPEG 格式
void onAGVCameraFrame(unsigned char* frameData, int w, int h) {
// 发送裸数据到 SDK
engine->sendCustomVideoCaptureRawData(
frameData,
w * h * 3 / 2, // NV12 格式
w, h,
w, // stride
ZEGO_VIDEO_BUFFER_TYPE_RAW_DATA,
getTimestamp(),
ZEGO_PUBLISH_CHANNEL_MAIN
);
}
3.2 AGV 状态数据嵌入 SEI 帧
远程调度员需要在画面上看到 AGV 的运行状态(速度、电量、任务号)。通过 SEI 嵌入到每一帧中:
// AGV 端:每帧推送携带状态信息的 SEI
uint64_t ntpNow = getNtpTime();
unsigned char agvData[32];
memcpy(agvData, &ntpNow, 8);
float speed = getAGVSpeed(); // 当前速度
float battery = getBatteryLevel(); // 剩余电量 %
uint32_t taskID = getCurrentTaskID(); // 当前任务
memcpy(agvData + 8, &speed, 4);
memcpy(agvData + 12, &battery, 4);
memcpy(agvData + 16, &taskID, 4);
engine->sendSEI(agvData, 20, ZEGO_PUBLISH_CHANNEL_MAIN);
3.3 多 AGV 同时拉流 + 自定义渲染
远程调度中心需要同时查看 10-20 台 AGV 的画面,通过自定义渲染在自定义 UI 中排列显示。
// 调度中心:监听流新增 → 自动拉流
class DispatchHandler : public IZegoEventHandler {
void onRoomStreamUpdate(const std::string& roomID,
ZegoUpdateType type,
const std::vector<ZegoStream>& list) override {
if (type == ZEGO_UPDATE_TYPE_ADD) {
for (auto& stream : list) {
engine->startPlayingStream(stream.streamID);
}
}
}
};
// 通过自定义渲染在 AGV 地图上叠加视频画面
ZegoCustomVideoRenderConfig renderConfig;
renderConfig.bufferType = ZEGO_VIDEO_BUFFER_TYPE_RAW_DATA;
renderConfig.frameFormatSeries = ZEGO_VIDEO_FRAME_FORMAT_SERIES_RGB;
engine->enableCustomVideoRender(true, &renderConfig);
四、FAQ
Q1:仓库 Wi-Fi 环境下如何保障画面稳定?
仓库 Wi-Fi 受货架遮挡信号衰减严重。在 AGV 端开启流量控制 enableTrafficControl 自适应降级 + setMinVideoBitrateForTrafficControl(150) 极低码率保底。AGV 靠近信号盲区时自动降帧率到 5fps,保持音频/控制信号不中断。
Q2:10 台 AGV 同时推流,带宽够吗?
单台 AGV 360p @ 200kbps,10 台共 2Mbps 上行。仓库 Wi-Fi 通常提供 50-100Mbps 上行带宽,完全足够。
五、总结
无人仓储的 RTC 需求可以概括为「AGV 画面回传 + 状态 SEI 嵌入 + 远程干预」。通过自定义采集接入 AGV 的车载摄像头、SEI 帧附带运行状态、多房间自动监听新 AGV 上线。ZEGO SDK 覆盖了从单台 AGV 到数百台集群的远程管理需求。
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/info/69325.html