Topik ini menjelaskan cara mengirim dan menerima pesan menggunakan Data Channel dalam ApsaraVideo Real-time Communication (ARTC) SDK.
Kode Contoh
Pengiriman dan penerimaan pesan kustom client Android: Android/ARTCExample/BasicUsage/src/main/java/com/aliyun/artc/api/basicusage/DataChannelMessage/DataChannelMessageActivity.java.
Pengiriman dan penerimaan pesan kustom client iOS: iOS/ARTCExample/BasicUsage/DataChannelMessage/DataChannelMessageVC.swift.
Pengiriman dan penerimaan pesan kustom client Harmony: Harmony/ARTCExample/entry/src/main/ets/pages/basicusage/DataChannelMessagePage.ets.
Prasyarat
Anda harus memiliki Akun Alibaba Cloud yang valid dan aplikasi ApsaraVideo Real-time Communication. Untuk petunjuknya, lihat Buat Aplikasi. Anda dapat mengambil App ID dan App Key dari Application Management Console.
Anda harus mengintegrasikan ARTC SDK ke dalam proyek Anda dan mengimplementasikan fitur audio dan video real-time dasar. Untuk integrasi SDK, lihat Unduh dan Integrasi SDK. Untuk mengimplementasikan panggilan audio dan video, lihat Mengimplementasikan Panggilan Audio dan Video.
Fitur DataChannel ARTC bergantung pada streamer yang mendorong aliran audio atau video. Oleh karena itu, gunakan fitur ini hanya setelah membangun panggilan dan mulai mendorong audio atau video. Jika skenario Anda tidak memerlukan streaming audio atau video aktual, dorong aliran audio senyap untuk memenuhi dependensi ini dan mengaktifkan DataChannel.
Implementasi Fitur

Streamer dapat mengirim dan menerima pesan. Penonton hanya dapat menerima pesan.
Aktifkan Saluran Pesan Kustom
ARTC tidak mengaktifkan saluran pesan kustom secara default. Panggil antarmuka setParameter untuk mengaktifkannya. Anda dapat memanggil antarmuka ini sebelum atau setelah bergabung ke channel.
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
// Client Web harus memanggil ini sebelum 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);Kirim Pesan Kustom
Setelah DataChannel terbentuk, gunakan antarmuka sendDataChannelMsg.
Streamer dapat mengirim dan menerima pesan. Penonton hanya dapat menerima pesan.
Panggil
setParameteruntuk mengaktifkan saluran pesan kustom.Pengiriman data memiliki batasan berikut:
Batas bitrate: 30 KB/detik.
Saluran data dapat mengirim hingga 60 paket data per detik, dengan setiap paket dibatasi hingga 1 KB.
Android
AliRtcEngine.AliRtcDataChannelMsg msg = new AliRtcEngine.AliRtcDataChannelMsg();
msg.type = AliRtcEngine.AliRtcDataMsgType.AliEngineDataMsgCustom;
/* Semua jenis data didukung, termasuk teks dan gambar. */
msg.data = xxxx;
mAliRtcEngine.sendDataChannelMsg(msg);iOS
AliRtcDataChannelMsg* msg = [[AliRtcDataChannelMsg alloc] init];
msg.type = AliRtcDataMsgCustom;
/* Semua jenis data didukung, termasuk teks dan gambar. */
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;
// Kirim pesan
const res = this.rtcEngine.sendDataChannelMsg(msg);Web
const data = new TextEncoder().encode('xxxx');
// Data dapat berupa tipe apa pun (seperti teks atau gambar), dalam format ArrayBuffer.
mAliRtcEngine.sendDataChannelMessage(
new AliRtcDataChannelMsg(data),
);Mac
AliRtcDataChannelMsg* msg = [[AliRtcDataChannelMsg alloc] init];
msg.type = AliRtcDataMsgCustom;
/* Semua jenis data didukung, termasuk teks dan gambar. */
msg.data = xxxxx;
[self.engine sendDataChannelMessage:msg];Windows
AliEngineDataChannelMsg msg;
msg.type = AliEngineDataChannelCustom;
/* Semua jenis data didukung, termasuk teks dan gambar. */
msg.data = data;
msg.dataLen = dataLength;
mAliRtcEngine->SendDataChannelMessage(msg);Terima Pesan Kustom
Terima pesan kustom dengan mendengarkan callback onDataChannelMessage.
Android
// Saat AliRtcEngineNotify dipicu
public void onDataChannelMessage(String uid, AliRtcEngine.AliRtcDataChannelMsg msg) {
/* TODO: Tulis logika untuk memproses pesan kustom. */
}iOS
- (void)onDataChannelMessage:(NSString *_Nonnull)uid controlMsg:(AliRtcDataChannelMsg*_Nonnull)controlMsg {
/* TODO: Tulis logika untuk memproses pesan kustom. */
}Harmony
// Callback penerimaan pesan saluran data
listener.onDataChannelMessage((uid: string, msg: AliRtcDataChannelMsg) => {
console.info(`Pesan saluran data diterima: uid=${uid}, type=${msg.type}`);
/* TODO: Tulis logika untuk memproses pesan kustom. */
});Web
mAliRtcEngine.on('dataChannelMsg', (uid, message) => {
// Tulis logika untuk memproses pesan kustom.
console.log('dataChannelMsg', uid, message);
});Mac
- (void)onDataChannelMessage:(NSString *)uid controlMsg:(AliRtcDataChannelMsg *)controlMsg {
/* TODO: Tulis logika untuk memproses pesan kustom. */
}Windows
public:
virtual void OnDataChannelMessage(const char* uid, const AliEngineDataChannelMsg& msg) override {
/* TODO: Tulis logika untuk memproses pesan kustom. */
}