UDP JPEG 视频通道协议
约 1224 字大约 4 分钟
2026-10-23
联犀 AI 交互设备在既有 UDP 音频通道(在新窗口打开)之上扩展了 JPEG 视频上下行能力:设备无需 WebRTC 栈与 H.264 编解码硬件,用与音频完全相同的 UDP 通道、密钥与会话,即可向平台上报摄像头画面(AI 视觉),并接收对端画面在屏幕上显示。适合以 ESP32-S3 为代表的低算力 MCU 语音设备增加"看得见"的交互能力。
1. 能力概述
| 方向 | 链路 | 说明 |
|---|---|---|
| 上行 | 设备摄像头 → JPEG → UDP 分片 → 平台 → AI 视觉模型 | 设备直出 JPEG,平台无需解码,用于"你看到了什么"类视觉交互 |
| 下行 | 对端画面 → 平台解码转 JPEG → UDP 分片 → 设备屏幕 | 设备端 JPEG 软解码即可,不要求 H.264 硬件 |
设计取舍:实时音视频对话仍建议走 WebRTC(硬件编码 + H.264);JPEG 分片通道面向视觉采样场景——AI 模型处理为秒级,数百毫秒的单帧传输延迟无感知,且允许丢帧。
2. 帧格式
视频帧与音频帧共用 16 字节头与 AES-128-CTR 加密(IV 仍为 16 字节帧头),通过帧类型字段区分:
[0:2] 帧类型:0x0100 = Opus 音频(不变),0x0200 = JPEG 视频分片
[2:4] payload 长度,大端 uint16
[4:12] sessionID,大端 uint64(与音频帧相同)
[12:16] sequence,大端 uint32(音视频共用,会话内单调递增;同一帧的分片占用连续序号)
[16:] AES-128-CTR 加密区加密区解密后,前 8 字节为分片头,其后为分片数据:
[16:18] 分片索引,大端 uint16,从 0 起
[18:20] 总分片数,大端 uint16
[20:22] JPEG 总大小,大端 uint16(单帧上限 65535 字节)
[22:24] 保留,填 0
[24:] JPEG 分片数据要点:
- 分片头随数据一起加密:设备端一次 AES-CTR 加解密即可,处理流程与音频帧完全同构
- 单片分片数据 1200 字节:24 字节总头 + 1200B < 1500B,MTU 安全;一帧 30KB 的 JPEG 约 25 片,一次性发出(UDP 无需等确认)
- 单帧上限 65535 字节,覆盖常见视觉协处理器的 48KiB 输出上限,超限整帧丢弃
- 0 号片(分片索引 0)携带该帧的总片数与 JPEG 总大小,是帧的起点
3. 发送与接收规则
设备上行:
- 摄像头产出完整 JPEG(硬件编码器、视觉协处理器或软件编码均可)
- 按 1200 字节切片,依次填充分片头后整体加密发送;同一帧各片的 sequence 连续递增,与音频共用序号空间
- 按目标帧率发送(建议 1–5fps),帧率由设备按自身算力决定
设备下行:
- 收到 0x0200 帧后解密,按分片索引缓存
- 分片索引 0 到达时按其声明的总片数/总大小开帧;未收到 0 号片时,后续分片按序号缓存等待归并
- 全部分片到齐后拼接并校验总大小,一致即为完整 JPEG,可送解码显示
- 平台侧对不完整帧 500ms 超时丢弃,无重传、无前向纠错——视觉采样容忍丢帧,丢一帧等下一帧即可
4. 设备侧实现要求与算力参考
| 环节 | 建议 | 参考(352x288, 5fps) |
|---|---|---|
| JPEG 编码 | 优先视觉协处理器或传感器直出(零主控开销);软件编码可用 esp_jpeg_enc 兜底 | 硬编 10–30ms,软编 50–200ms |
| AES 加解密 | 走平台 PSA Crypto API,自动使用 ESP32-S3 硬件 AES 加速器 | 30KB 帧加密 1–2ms,<1% CPU |
| JPEG 解码(可选,下行显示) | esp_jpeg_dec 软解 | 10–30ms/帧 @240MHz |
| 上行整链路(分片+加密+发送) | — | 约 3ms/帧,<2% CPU |
5. 能力声明与当前状态
设备通过联犀内置信令的能力上报声明视频能力:相机发布声明(codecs 含 jpeg)表示可上行视觉画面,接收能力声明(videoCodecs 含 jpeg)表示可下行显示。支持 H.264 与 WebRTC 的强算力设备沿用既有声明,平台按声明自动选择媒体路径。
当前交付状态:
- 平台侧媒体面(分片编解码、乱序重组、加密下发)已实现
- 信令能力协商字段与业务装配(视觉消费、下行发起)随后续版本交付;在此之前发送 0x0200 帧不会被处理,设备端可先行按本文实现并自测
6. 参考实现
- 服务端帧格式权威实现:
backend/core/service/imsvr/internal/voice/udpserver/video.go - 音频通道规范(帧头与加密同源):10.UDP 音频通道
- 平台侧设备模拟器(含跨端一致性测试):
backend/things/tools/deviceim - 纯 Go H.264 编解码(下行对端画面转码):解码由平台侧完成,设备无感
更新日志
2026/10/23 11:01
查看所有更新日志
f64da-docs(AI与音视频): 新增 UDP JPEG 视频通道协议参考于
