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

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

最終更新日:Jan 10, 2026

このトピックでは、カスタムメッセージを送受信する方法について説明し、サンプルコードを提供します。

サンプルコード

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

iOS でのカスタムメッセージの送受信iOS/ARTCExample/BasicUsage/DataChannelMessage/DataChannelMessageVC.swift

前提条件

実装

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,
    },
  }),
);

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;
/* data は任意のタイプのデータ (テキスト、画像など) にすることができます */
msg.data =  xxxx;
mAliRtcEngine.sendDataChannelMsg(msg);

iOS

AliRtcDataChannelMsg* msg = [[AliRtcDataChannelMsg alloc] init];
msg.type = AliRtcDataMsgCustom;
/* data は任意のタイプのデータ (テキスト、画像など) にすることができます */
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');
// data は ArrayBuffer 形式の任意のタイプのデータ (テキスト、画像など) にすることができます
mAliRtcEngine.sendDataChannelMessage(
  new AliRtcDataChannelMsg(data), 
);

Windows

AliEngineDataChannelMsg msg;
msg.type = AliEngineDataChannelCustom;
/* data は任意のタイプのデータ (テキスト、画像など) にすることができます */
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(`Received data channel message: uid=${uid}, type=${msg.type}`);
  /* TODO: ここにカスタムメッセージの処理ロジックを追加します。 */
});

Web

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

Windows

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