自定义消息 / SEI 消息
您可以通过两种方式向房间内的用户传输应用程序数据消息。
Demo
自定义消息
支持的 SDK 版本:v5.6.0+。
只有 TRTC.TYPE.ROLE_ANCHOR 角色可以调用 trtc.sendCustomMessage。
应在成功调用 TRTC.enterRoom 后调用此 API。
自定义消息将按顺序尽可能可靠地发送,但在网络极差的情况下可能会丢失消息。接收方也将按顺序接收消息。
发送自定义消息
参数名 | 类型 | 说明 |
cmdId | number | 必填。消息 ID。整数,范围 [1, 10]。 可以为不同类型的消息设置不同的 cmdId 以减少消息传输延迟。 |
data | ArrayBuffer | 必填。消息数据。 单次发送最大 1KB(字节)。 每秒最多 30 次调用。 每秒最多发送 8KB。 |
const trtc = TRTC.create();await trtc.enterRoom({ sdkAppId, userId, userSig, roomId: 12345 })// 发送自定义消息const data = new TextEncoder().encode('hello').buffer;trtc.sendCustomMessage({ cmdId: 1, data });
接收自定义消息
// 接收自定义消息trtc.on(TRTC.EVENT.CUSTOM_MESSAGE, event => {// event.userId: 远端用户 ID。// event.cmdId: 消息 cmdId。// event.seq: 消息序列号。// event.data: 自定义消息数据,类型为 ArrayBuffer。console.log(`收到来自 ${event.userId} 的自定义消息,内容: ${new TextDecoder().decode(event.data)}`)})
SEI 消息
视频帧的头部包含一个称为补充增强信息(SEI)的头块。它是插入到视频比特流中的附加数据,用于传达额外信息。您可以将大量信息添加到 SEI 中,例如摄像头或编码器的参数、时间、隐藏式字幕、歌词和版权信息。
发送 SEI 消息
// 1. 开启 SEIconst trtc = TRTC.create({ enableSEI: true })// 2. 进房并开启本地视频await trtc.enterRoom({ sdkAppId, userId, userSig, roomId: 12345 })await trtc.startLocalVideo();// 3. 发送 SEIconst unit8Array = new Uint8Array([1, 2, 3]);trtc.sendSEIMessage(unit8Array.buffer);
注意:
1. 支持的 SDK 版本:v5.3.0+。支持的浏览器:Chrome 86+、Edge 86+、Opera 72+(基于 Chromium 内核的浏览器 M86+)。
2. 单次发送最大 1KB(字节),每秒最多 30 次调用,每秒最多发送 8KB。
3. 由于 SEI 随视频帧一起发送,网络不佳时视频帧可能丢失,因此 SEI 也可能丢失。可以在频率限制内增加发送次数,接收端需要进行消息去重。
4. 未调用 trtc.startLocalVideo 无法发送 SEI,未调用 trtc.startRemoteVideo 无法接收 SEI。
5. 仅支持 H264 编码器发送和接收 SEI。
接收 SEI 消息
// 1. 开启 SEIconst trtc = TRTC.create({ enableSEI: true })// 2. 接收 SEItrtc.on(TRTC.EVENT.SEI_MESSAGE, event => {console.log(`收到来自 ${event.userId} 的 SEI 消息,数据: ${event.data},流类型: ${event.streamType}`)})
