Envie e receba mensagens personalizadas em tempo real pelo Data Channel no ARTC SDK.
Código de exemplo
Envio e recebimento de mensagens personalizadas no cliente Android: Android/ARTCExample/BasicUsage/src/main/java/com/aliyun/artc/api/basicusage/DataChannelMessage/DataChannelMessageActivity.java.
Envio e recebimento de mensagens personalizadas no cliente iOS: iOS/ARTCExample/BasicUsage/DataChannelMessage/DataChannelMessageVC.swift.
Envio e recebimento de mensagens personalizadas no cliente Harmony: Harmony/ARTCExample/entry/src/main/ets/pages/basicusage/DataChannelMessagePage.ets.
Pré-requisitos
Tenha uma conta Alibaba Cloud válida e um aplicativo ARTC. Para obter instruções, consulte Crie aplicativo. Obtenha seu App ID e App Key no Console de gerenciamento de aplicativos.
Integre o ARTC SDK ao seu projeto com os recursos básicos de áudio e vídeo em tempo real implementados. Para integrar o SDK, consulte Baixe e integração do SDK. Para implementar chamadas de áudio e vídeo, consulte Implementação de chamadas de áudio e vídeo.
O recurso DataChannel do ARTC exige que o streamer envie fluxos de áudio ou vídeo. Use-o somente após estabelecer uma chamada e iniciar o envio de áudio ou vídeo. Se o cenário não exigir transmissão real de áudio ou vídeo, envie um fluxo de áudio silencioso para atender a essa dependência e ative o DataChannel.
Implementação do recurso

Streamers podem enviar e receber mensagens. Espectadores apenas recebem mensagens.
Ative canal de mensagens personalizadas
O canal de mensagens personalizadas vem desativado por padrão no ARTC. Chame a interface setParameter para ativá-lo. Você pode chamar essa interface antes ou depois de entrar em um 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);
Enviar mensagens personalizadas
Após estabelecer um DataChannel, chame a interface sendDataChannelMsg para enviar mensagens.
Streamers podem enviar e receber mensagens. Espectadores apenas recebem mensagens.
Chame
setParameterpara ativar o canal de mensagens personalizadas antes de enviar mensagens.-
O envio de dados tem os seguintes limites:
Limite de taxa de bits: 30 KB/s.
O canal de dados envia até 60 pacotes por segundo, com cada pacote limitado a 1 KB.
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);
Receber mensagens personalizadas
Monitore o callback onDataChannelMessage para receber mensagens personalizadas.
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. */
}