Envoyez et recevez des messages personnalisés en temps réel via le canal de données (Data Channel) du kit SDK ARTC.
Exemple de code
Envoi et réception de messages personnalisés sur le client Android : Android/ARTCExample/BasicUsage/src/main/java/com/aliyun/artc/api/basicusage/DataChannelMessage/DataChannelMessageActivity.java.
Envoi et réception de messages personnalisés sur le client iOS : iOS/ARTCExample/BasicUsage/DataChannelMessage/DataChannelMessageVC.swift.
Envoi et réception de messages personnalisés sur le client Harmony : Harmony/ARTCExample/entry/src/main/ets/pages/basicusage/DataChannelMessagePage.ets.
Prérequis
Vous disposez d'un compte Alibaba Cloud valide et d'une application ARTC. Pour plus d'instructions, consultez la rubrique Créer une application. Vous pouvez récupérer votre ID d'application et votre clé d'application depuis la console de gestion des applications.
Le kit SDK ARTC est intégré à votre projet et les fonctionnalités de base d'audio et de vidéo en temps réel sont implémentées. Pour l'intégration du kit SDK, consultez la rubrique Téléchargement et intégration du kit SDK. Pour la mise en œuvre des appels audio et vidéo, consultez la rubrique Mettre en œuvre les appels audio et vidéo.
La fonctionnalité DataChannel d'ARTC nécessite que le diffuseur pousse des flux audio ou vidéo. Utilisez-la uniquement après avoir établi un appel et commencé à pousser de l'audio ou de la vidéo. Si votre scénario ne nécessite pas de diffusion audio ou vidéo réelle, poussez un flux audio silencieux pour satisfaire cette dépendance et activer le DataChannel.
Mise en œuvre de la fonctionnalité

Les diffuseurs peuvent envoyer et recevoir des messages. Les spectateurs peuvent uniquement recevoir des messages.
Activer le canal de messages personnalisés
Le canal de messages personnalisés est désactivé par défaut dans ARTC. Appelez l'interface setParameter pour l'activer. Vous pouvez appeler cette interface avant ou après avoir rejoint un canal.
Android
param = "{\"data\":{\"enablePubDataChannel\":true" + ",\"enableSubDataChannel\":true}}";
mAliRtcEngine.setParameter(param);
iOS
NSString* parameter = [NSString stringWithFormat:@"{\"data\":{\"enablePubDataChannel\":true,\"enableSubDataChannel\":true}}"];
[self.engine setParameter:parameter];
Harmony
const param = '{"data":{"enablePubDataChannel":true,"enableSubDataChannel":true}}';
this.rtcEngine.setParameter(param);
Web
// The Web client must call this before joinChannel
mAliRtcEngine.setParameter(
JSON.stringify({
data: {
enablePubDataChannel: true,
enableSubDataChannel: true,
},
}),
);
Mac
NSString* parameter = [NSString stringWithFormat:@"{\"data\":{\"enablePubDataChannel\":true,\"enableSubDataChannel\":true}}"];
[self.engine setParameter:parameter];
Windows
char * param = "{\"data\":{\"enablePubDataChannel\":true,\"enableSubDataChannel\":true}}";
mAliRtcEngine->SetParameter(param);
Envoyer des messages personnalisés
Après avoir établi un DataChannel, appelez l'interface sendDataChannelMsg pour envoyer des messages.
Les diffuseurs peuvent envoyer et recevoir des messages. Les spectateurs peuvent uniquement recevoir des messages.
Appelez
setParameterpour activer le canal de messages personnalisés avant d'envoyer des messages.-
L'envoi de données est soumis aux limites suivantes :
Limite de débit : 30 Ko/s.
Le canal de données peut envoyer jusqu'à 60 paquets de données par seconde, chaque paquet étant limité à 1 Ko.
Android
AliRtcEngine.AliRtcDataChannelMsg msg = new AliRtcEngine.AliRtcDataChannelMsg();
msg.type = AliRtcEngine.AliRtcDataMsgType.AliEngineDataMsgCustom;
/* All types of data are supported, including text and images. */
msg.data = xxxx;
mAliRtcEngine.sendDataChannelMsg(msg);
iOS
AliRtcDataChannelMsg* msg = [[AliRtcDataChannelMsg alloc] init];
msg.type = AliRtcDataMsgCustom;
/* All types of data are supported, including text and images. */
msg.data = xxxxx;
[self.engine sendDataChannelMessage:msg];
Harmony
const msg = new AliRtcDataChannelMsg();
msg.type = AliRtcDataMsgType.AliRtcDataChannelCustom;
const seiData = this.stringToArrayBuffer(this.SendText);
msg.data = seiData;
// Send message
const res = this.rtcEngine.sendDataChannelMsg(msg);
Web
const data = new TextEncoder().encode('xxxx');
// Data can be any type (such as text or images), in ArrayBuffer format.
mAliRtcEngine.sendDataChannelMessage(
new AliRtcDataChannelMsg(data),
);
Mac
AliRtcDataChannelMsg* msg = [[AliRtcDataChannelMsg alloc] init];
msg.type = AliRtcDataMsgCustom;
/* All types of data are supported, including text and images. */
msg.data = xxxxx;
[self.engine sendDataChannelMessage:msg];
Windows
AliEngineDataChannelMsg msg;
msg.type = AliEngineDataChannelCustom;
/* All types of data are supported, including text and images. */
msg.data = data;
msg.dataLen = dataLength;
mAliRtcEngine->SendDataChannelMessage(msg);
Recevoir des messages personnalisés
Écoutez le rappel onDataChannelMessage pour recevoir des messages personnalisés.
Android
// When AliRtcEngineNotify is triggered
public void onDataChannelMessage(String uid, AliRtcEngine.AliRtcDataChannelMsg msg) {
/* TODO: Write the logic for processing custom messages. */
}
iOS
- (void)onDataChannelMessage:(NSString *_Nonnull)uid controlMsg:(AliRtcDataChannelMsg*_Nonnull)controlMsg {
/* TODO: Write the logic for processing custom messages. */
}
Harmony
// Data channel message reception callback
listener.onDataChannelMessage((uid: string, msg: AliRtcDataChannelMsg) => {
console.info(`Received data channel message: uid=${uid}, type=${msg.type}`);
/* TODO: Write the logic for processing custom messages. */
});
Web
mAliRtcEngine.on('dataChannelMsg', (uid, message) => {
// Write the logic for processing custom messages.
console.log('dataChannelMsg', uid, message);
});
Mac
- (void)onDataChannelMessage:(NSString *)uid controlMsg:(AliRtcDataChannelMsg *)controlMsg {
/* TODO: Write the logic for processing custom messages. */
}
Windows
public:
virtual void OnDataChannelMessage(const char* uid, const AliEngineDataChannelMsg& msg) override {
/* TODO: Write the logic for processing custom messages. */
}