すべてのプロダクト
Search
ドキュメントセンター

ApsaraVideo Live:カスタムメッセージの送受信

最終更新日:Mar 12, 2026

このトピックでは、ApsaraVideo Real-time Communication (ARTC) SDK のデータチャネルを使用してメッセージを送受信する方法について説明します。

サンプルコード

Android クライアントでのカスタムメッセージの送受信: Android/ARTCExample/BasicUsage/src/main/java/com/aliyun/artc/api/basicusage/DataChannelMessage/DataChannelMessageActivity.java

iOS クライアントでのカスタムメッセージの送受信: iOS/ARTCExample/BasicUsage/DataChannelMessage/DataChannelMessageVC.swift

Harmony クライアントでのカスタムメッセージの送受信: Harmony/ARTCExample/entry/src/main/ets/pages/basicusage/DataChannelMessagePage.ets

前提条件

説明

ARTC のデータチャネル機能は、ストリーマーが音声またはビデオストリームをプッシュすることに依存します。そのため、通話を確立し、音声またはビデオのプッシュを開始した後にのみ使用してください。ご利用のシナリオで実際の音声またはビデオストリーミングが必要ない場合は、無音の音声ストリームをプッシュしてこの依存関係を満たし、データチャネルを有効にしてください。

機能の実装

image.jpeg

説明

ストリーマーはメッセージを送受信できます。視聴者はメッセージの受信のみ可能です。

カスタムメッセージチャネルの有効化

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];

Harmony

const param = '{"data":{"enablePubDataChannel":true,"enableSubDataChannel":true}}';
this.rtcEngine.setParameter(param);

Web

// Web クライアントは 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);

カスタムメッセージの送信

データチャネルを確立した後、sendDataChannelMsg インターフェイスを使用します。

重要
  • ストリーマーはメッセージを送受信できます。視聴者はメッセージの受信のみ可能です。

  • setParameter を呼び出して、カスタムメッセージチャネルを有効にします。

  • データ送信には以下の制限があります:

    • ビットレート制限:30 KB/s。

    • データチャネルは、1 秒あたり最大 60 のデータパケットを送信でき、各パケットは 1 KB に制限されます。

Android

AliRtcEngine.AliRtcDataChannelMsg msg = new AliRtcEngine.AliRtcDataChannelMsg();
msg.type = AliRtcEngine.AliRtcDataMsgType.AliEngineDataMsgCustom;
/* テキストや画像など、すべてのデータタイプがサポートされています。 */
msg.data =  xxxx;
mAliRtcEngine.sendDataChannelMsg(msg);

iOS

AliRtcDataChannelMsg* msg = [[AliRtcDataChannelMsg alloc] init];
msg.type = AliRtcDataMsgCustom;
/* テキストや画像など、すべてのデータタイプがサポートされています。 */
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;

// メッセージを送信
const res = this.rtcEngine.sendDataChannelMsg(msg);

Web

const data = new TextEncoder().encode('xxxx');
// データは ArrayBuffer 形式で、任意のタイプ (テキストや画像など) にすることができます。
mAliRtcEngine.sendDataChannelMessage(
  new AliRtcDataChannelMsg(data), 
);

Mac

AliRtcDataChannelMsg* msg = [[AliRtcDataChannelMsg alloc] init];
msg.type = AliRtcDataMsgCustom;
/* テキストや画像など、すべてのデータタイプがサポートされています。 */
msg.data = xxxxx;
[self.engine sendDataChannelMessage:msg];

Windows

AliEngineDataChannelMsg msg;
msg.type = AliEngineDataChannelCustom;
/* テキストや画像など、すべてのデータタイプがサポートされています。 */
msg.data =  data;
msg.dataLen = dataLength;
mAliRtcEngine->SendDataChannelMessage(msg);

カスタムメッセージの受信

onDataChannelMessage コールバックをリッスンすることで、カスタムメッセージを受信します。

Android

// AliRtcEngineNotify がトリガーされたとき
public void onDataChannelMessage(String uid, AliRtcEngine.AliRtcDataChannelMsg msg) {
    /* TODO: カスタムメッセージを処理するロジックを記述します。 */
}

iOS

- (void)onDataChannelMessage:(NSString *_Nonnull)uid controlMsg:(AliRtcDataChannelMsg*_Nonnull)controlMsg {
	/* TODO: カスタムメッセージを処理するロジックを記述します。 */
}

Harmony

// データチャネルメッセージ受信コールバック
listener.onDataChannelMessage((uid: string, msg: AliRtcDataChannelMsg) => {
  console.info(`データチャネルメッセージを受信しました:uid=${uid}, type=${msg.type}`);
  /* TODO: カスタムメッセージを処理するロジックを記述します。 */
});

Web

mAliRtcEngine.on('dataChannelMsg', (uid, message) => {
  // カスタムメッセージを処理するロジックを記述します。
  console.log('dataChannelMsg', uid, message);
});

Mac

- (void)onDataChannelMessage:(NSString *)uid controlMsg:(AliRtcDataChannelMsg *)controlMsg {
    /* TODO: カスタムメッセージを処理するロジックを記述します。 */
}

Windows

public:
virtual void OnDataChannelMessage(const char* uid, const AliEngineDataChannelMsg& msg) override {
    /* TODO: カスタムメッセージを処理するロジックを記述します。 */
}