本文将介绍自定义消息发送和接收的实现原理和示例代码。
示例代码
Android端自定义消息发送与接收:Android/ARTCExample/BasicUsage/src/main/java/com/aliyun/artc/api/basicusage/DataChannelMessage/DataChannelMessageActivity.java
。
iOS端自定义消息发送与接收:iOS/ARTCExample/BasicUsage/DataChannelMessage/DataChannelMessageVC.swift
。
前提条件
功能实现
说明
主播角色可以发送和接收消息,观众角色仅支持接收消息。
开启自定义消息通道
ARTC 默认不开启自定义消息通道,需要调用setParameter
接口进行开启,该接口加入频道前后均可调用。
Android
param = "{\"data\":{\"enablePubDataChannel\":true" + ",\"enableSubDataChannel\":true}}";
mAliRtcEngine.setParameter(param);
iOS
NSString* parameter = [NSString stringWithFormat:@"{\"data\":{\"enablePubDataChannel\":true,\"enableSubDataChannel\":true}}"];
[self.engine setParameter:parameter];
Web
// Web 端需要在 joinChannel 之前调用
mAliRtcEngine.setParameter(
JSON.stringify({
data: {
enablePubDataChannel: true,
enableSubDataChannel: true,
},
}),
);
Windows
char * param = "{\"data\":{\"enablePubDataChannel\":true,\"enableSubDataChannel\":true}}";
mAliRtcEngine->SetParameter(param);
Linux
Java相关示例代码请参见Java快速接入>消息收发。
C++相关示例代码请参见C++快速接入>消息通讯。
Python相关示例代码请参见Python快速接入>消息通讯。
发送自定义消息
在建立DataChannel通道后,可以通过sendDataChannelMsg
接口。
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];
Web
const data = new TextEncoder().encode('xxxx');
// data 可以是任意数据(文字、图片等),格式是 ArrayBuffer
mAliRtcEngine.sendDataChannelMessage(
new AliRtcDataChannelMsg(data),
);
Windows
AliEngineDataChannelMsg msg;
msg.type = AliEngineDataChannelCustom;
/* data可以是任意数据(文字、图片等) */
msg.data = data;
msg.dataLen = dataLength;
mAliRtcEngine->SendDataChannelMessage(msg);
Linux
Java相关示例代码请参见Java快速接入>消息收发。
C++相关示例代码请参见C++快速接入>消息通讯。
Python相关示例代码请参见Python快速接入>消息通讯。
接收自定义消息
通过监听onDataChannelMessage
回调来接收自定义消息。
Android
//在AliRtcEngineNotify回调中
public void onDataChannelMessage(String uid, AliRtcEngine.AliRtcDataChannelMsg msg) {
/* TODO:编写自定义消息的处理 */
}
iOS
- (void)onDataChannelMessage:(NSString *_Nonnull)uid controlMsg:(AliRtcDataChannelMsg*_Nonnull)controlMsg {
/* TODO:编写自定义消息的处理 */
}
Web
mAliRtcEngine.on('dataChannelMsg', (uid, message) => {
// 编写自定义消息的处理
console.log('dataChannelMsg', uid, message);
});
Windows
public:
virtual void OnDataChannelMessage(const char* uid, const AliEngineDataChannelMsg& msg) override {
/* TODO:编写自定义消息的处理 */
}
Linux
Java相关示例代码请参见Java快速接入>消息收发。
C++相关示例代码请参见C++快速接入>消息通讯。
Python相关示例代码请参见Python快速接入>消息通讯。
该文章对您有帮助吗?