自定义消息发送和接收

ARTC SDK提供自定义消息的发送和接收能力,实现在传输音视频数据的同时再发送自定义的实时消息数据。本文介绍自定义消息发送和接收的实现原理和示例代码。

实现原理

主播角色可以发送和接收消息,观众角色仅支持接收消息。

image.jpeg

示例代码

开启自定义消息通道

说明
  • 默认不开启,必须通过如下接口开启自定义消息通道。

  • 该接口在创建引擎后,入会前和入会后都可以调用。

  • Android示例代码:

    param = "{\"data\":{\"enablePubDataChannel\":true" + ",\"enableSubDataChannel\":true}}";
    mAliRtcEngine.setParameter(param);
  • iOS示例代码:

    NSString* parameter = [NSString stringWithFormat:@"{\"data\":{\"enablePubDataChannel\":true,\"enableSubDataChannel\":true}}"];
    [self.engine setParameter:parameter];
  • Windows示例代码

    char * param = "{\"data\":{\"enablePubDataChannel\":true,\"enableSubDataChannel\":true}}";
    mAliRtcEngine->SetParameter(param);
  • Linux示例代码

    Java相关示例代码请参见Java快速接入>消息收发

    C++相关示例代码请参见C++快速接入>消息通讯

    Python相关示例代码请参见Python快速接入>消息通讯

发送自定义消息

  • Android示例代码:

    AliRtcEngine.AliRtcDataChannelMsg msg = new AliRtcEngine.AliRtcDataChannelMsg();
    msg.type = AliRtcEngine.AliRtcDataMsgType.AliEngineDataMsgCustom;
    /* data可以是任意数据(文字、图片等) */
    msg.data =  xxxx;
    mAliRtcEngine.sendDataChannelMsg(msg);
  • iOS示例代码:

    AliRtcDataChannelMsg* msg = [[AliRtcDataChannelMsg alloc] init];
    msg.type = AliRtcDataMsgCustom;
    /* data可以是任意数据(文字、图片等) */
    msg.data = xxxxx;
    [self.engine sendDataChannelMessage:msg];
  • Windows示例代码:

    AliEngineDataChannelMsg msg;
    msg.type = AliEngineDataChannelCustom;
    /* data可以是任意数据(文字、图片等) */
    msg.data =  data;
    msg.dataLen = dataLength;
    mAliRtcEngine->SendDataChannelMessage(msg);
  • Linux示例代码

    Java相关示例代码请参见Java快速接入>消息收发

    C++相关示例代码请参见C++快速接入>消息通讯

    Python相关示例代码请参见Python快速接入>消息通讯

接收自定义消息

通过监听回调接收自定义的消息。

  • Android示例代码:

    //在AliRtcEngineNotify回调中
    public void onDataChannelMessage(String uid, AliRtcEngine.AliRtcDataChannelMsg msg) {
        /* TODO:编写自定义消息的处理 */
    }
  • iOS示例代码:

    - (void)onDataChannelMessage:(NSString *_Nonnull)uid controlMsg:(AliRtcDataChannelMsg*_Nonnull)controlMsg {
    	/* TODO:编写自定义消息的处理 */
    }
  • Windows示例代码:

    public:
    virtual void OnDataChannelMessage(const char* uid, const AliEngineDataChannelMsg& msg) override {
        /* TODO:编写自定义消息的处理 */
    }
  • Linux示例代码

    Java相关示例代码请参见Java快速接入>消息收发

    C++相关示例代码请参见C++快速接入>消息通讯

    Python相关示例代码请参见Python快速接入>消息通讯