Feedback

自定义消息 / 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.EVENT.CUSTOM_MESSAGE 事件以接收自定义消息。
// 接收自定义消息
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 消息

您可以使用 trtc.sendSEIMessage 发送 SEI 消息。由于 SEI 插入到视频流中,因此应在启动本地视频后调用。
// 1. 开启 SEI
const trtc = TRTC.create({ enableSEI: true })
// 2. 进房并开启本地视频
await trtc.enterRoom({ sdkAppId, userId, userSig, roomId: 12345 })
await trtc.startLocalVideo();
// 3. 发送 SEI
const 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. 开启 SEI
const trtc = TRTC.create({ enableSEI: true })
// 2. 接收 SEI
trtc.on(TRTC.EVENT.SEI_MESSAGE, event => {
console.log(`收到来自 ${event.userId} 的 SEI 消息,数据: ${event.data},流类型: ${event.streamType}`)
})