BRTC SDK 提供了发送自定义消息的功能,通过该功能,角色为主播的用户都可以向同一个视频房间里的其他用户广播自己的定制消息。目前提供两种发送自定义消息的方式:
通过调用 BRTC 的 sendCustomCmdMsg 接口发送的,发送时需要指定四个参数:
// 发送自定义消息的示例代码 void BRTCCore::sendBRTC() { // 自定义消息命令字, 这里需要根据业务定制一套规则,这里以 0x1 代表发送文字广播消息为例 int cmdID = 0x1; std::string brtc = "BRTC"; const uint8_t* data = reinterpret_cast<const uint8_t*>(brtc.c_str()); // reliable 和 ordered 目前需要一致,这里以需要保证消息按发送顺序到达为例 m_pBrtc->sendCustomCmdMsg(cmdID, data, brtc.length, true, true); }
当房间中的一个用户通过 sendCustomCmdMsg 发出自定义消息后,房间中其他的用户可以通过 SDK 回调中的 onRecvCustomCmdMsg 接口来接收这些消息。
// 继承 BRTCCallback,实现 onRecvCustomCmdMsg 方法接收和处理房间内其他人发送的消息 void BRTCCore::onRecvCustomCmdMsg(const char* userId, int32_t cmdID, uint32_t seq, const uint8_t* message, uint32_t messageSize) { // 接收到 userId 发送的消息 switch (cmdId) // 发送方和接收方协商好的 cmdId { case 0: // 处理 cmdId = 0 消息 break; case 1: // 处理 cmdId = 1 消息 break; case 2: // 处理 cmdId = 2 消息 break; default: break; } }
由于需要把数据嵌入视频帧中,建议尽量控制数据大小,推荐使用几个字节大小的数据。最常见的用法是把自定义的时间戳(timstamp)用 sendSEIMsg 嵌入视频帧中,实现消息和画面的完美对齐。通过调用 BRTC 的 sendSEIMsg 接口发送的,发送时需要指定三个参数:
// 发送自定义消息的示例代码 void BRTCCore::sendBRTC() { // 自定义消息命令字 std::string brtc = "BRTC"; m_pBrtc->sendSEIMsg(brtc.c_str(), brtc.length(), 0); }
当房间中的一个用户通过 sendSEIMsg 发出自定义消息后,房间中其他的用户可以通过 SDK 回调中的 onRecvSEIMsg 接口来接收这些消息。
// 继承 BRTCCallback,实现 onRecvSEIMsg 方法接收和处理房间内其他人发送的消息 void BRTCCore::onRecvSEIMsg(const char* userId, const uint8_t* message, uint32_t messageSize) { // 接收到 userId 发送的消息 }
由于自定义消息享受比音视频数据更高的传输优先级,如果自定义数据发送过多,音视频数据可能会被干扰到,从而导致画面卡顿或者模糊。所以,我们针对自定义消息的发送进行了如下的频率限制:
发送自定义消息
BRTC SDK 提供了发送自定义消息的功能,通过该功能,角色为主播的用户都可以向同一个视频房间里的其他用户广播自己的定制消息。目前提供两种发送自定义消息的方式:
相关函数接口在 c++-sdk 2.5.5 及以上版本支持。
sendCustomCmdMsg 方式
消息发送
通过调用 BRTC 的 sendCustomCmdMsg 接口发送的,发送时需要指定四个参数:
消息接收
当房间中的一个用户通过 sendCustomCmdMsg 发出自定义消息后,房间中其他的用户可以通过 SDK 回调中的 onRecvCustomCmdMsg 接口来接收这些消息。
sendSEIMsg 方式
消息发送
由于需要把数据嵌入视频帧中,建议尽量控制数据大小,推荐使用几个字节大小的数据。
最常见的用法是把自定义的时间戳(timstamp)用 sendSEIMsg 嵌入视频帧中,实现消息和画面的完美对齐。
通过调用 BRTC 的 sendSEIMsg 接口发送的,发送时需要指定三个参数:
消息接收
当房间中的一个用户通过 sendSEIMsg 发出自定义消息后,房间中其他的用户可以通过 SDK 回调中的 onRecvSEIMsg 接口来接收这些消息。
使用限制
由于自定义消息享受比音视频数据更高的传输优先级,如果自定义数据发送过多,音视频数据可能会被干扰到,从而导致画面卡顿或者模糊。所以,我们针对自定义消息的发送进行了如下的频率限制: