2026/11/03 17:58:29
发送和接收视频 Metadata
自 v4.4.33 起,RTC 服务端 SDK 支持随视频发送和接收 Metadata,适用于需要传递视频附属信息的场景。
实现流程
- 实现
agora::rtc::IMetadataObserver,重写以下回调:getMaxMetadataSize:返回 Metadata 最大缓冲区大小,单位为字节。默认值为 512,最大为 1024。onReadyToSendMetadata:将要发送的数据写入metadata.buffer,设置metadata.size,并返回true。本帧不需要发送 Metadata 时返回false。onMetadataReceived:读取远端用户发送的 Metadata。
- 创建本地视频轨道后,调用该轨道的
registerVideoMetadataObserver注册观测器,并按照发送和接收媒体流的流程发布视频轨道。 - 在
onReadyToSendMetadata中提供要发送的数据。Metadata 的大小不得超过getMaxMetadataSize返回的值。 - 不再需要监听时,调用
unregisterVideoMetadataObserver注销观测器,再释放观测器对象。
Metadata 字段
IMetadataObserver::Metadata 包含以下字段:
| 字段 | 说明 |
|---|---|
channelId | 频道名。 |
uid | 发送 Metadata 的远端用户 ID。发送方无需设置。 |
size | Metadata 数据大小,单位为字节。 |
buffer | Metadata 数据缓冲区地址。发送时向缓冲区写入数据;接收时从缓冲区读取数据。 |
timeStampMs | Metadata 发送时间戳,单位为毫秒。 |
onReadyToSendMetadata 的 source_type 参数表示视频源类型,类型为 VIDEO_SOURCE_TYPE。
注意事项
- 视频 Metadata 随视频传输,使用前需要开启视频并发布视频轨道。
- 发送回调中的
metadata.buffer由 SDK 提供。确保写入的数据长度不超过配置的最大大小。 - 在回调执行期间处理接收到的数据。如果需要在回调结束后使用数据,请复制缓冲区内容。