Tous les produits
Search
Centre de documentation

ApsaraVideo Live:Envoi et réception de messages personnalisés

Dernière mise à jour :Aug 19, 2026

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

Remarque

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é

image.jpeg

Remarque

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.

Important
  • Les diffuseurs peuvent envoyer et recevoir des messages. Les spectateurs peuvent uniquement recevoir des messages.

  • Appelez setParameter pour 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. */
}