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

Intelligent Media Services:SEI を構成する

最終更新日:Jun 27, 2025

ApsaraVideo Real-time Communication (ARTC) Web 用 SDK を使用すると、Supplemental Enhancement Information (SEI) を送受信できます。 この機能を使用して、ARTC システムから Alibaba Cloud CDN またはサードパーティのライブストリーミング プラットフォームによって高速化された ApsaraVideo Live にカスタム メッセージを送信できます。

使用上の注意

以下のシナリオで SEI を使用できます。

  • SEI を使用してタイムスタンプを送信したり、エンドツーエンドのネットワーク遅延を計算したり、他のサービスとデータを同期したりします。

  • SEI を使用して説明を送信します。 最大 4,000 バイトのデータのみを送信でき、少量の情報しか伝送できません。 JSON 文字列またはプレーン文字列を使用することをお勧めします。

  • 内部目的で SEI 関連のプロトコルを使用します。

SEI を送信する

環境を確認する

環境が SEI をサポートしているかどうかを確認します。 環境が SEI をサポートしていない場合は、この機能を有効にしないでください。

// 静的メソッドを呼び出します。
const result = AliRtcEngine.isSupported();
if (!result.detail.isSendMediaExtensionMsgSupported) {
  console.log('お使いのブラウザは sei をサポートしていません。'); // お使いのブラウザは sei をサポートしていません。
}

SEI を送信する

この機能を有効にすると、クライアントのパフォーマンスオーバーヘッドが増加します。 SEI を送信するには、チャンネルに参加する前に setEnableMediaExtensionMsg を呼び出します。

// AliRtcEngine インスタンスが作成されていることを確認します。
// SEI を有効にするかどうかを指定します。 チャンネルに参加する前に、このメソッドを呼び出す必要があります。
aliRtcEngine.setEnableMediaExtensionMsg(true);

// SEI を使用して DataView オブジェクトを送信するとします。
const buffer = new ArrayBuffer(4);
const view = new DataView(buffer);

// DataView を使用して、7fff7fff である ArrayBuffer の内容を構成します。
view.setInt8(0, 127); // 最初のバイトを 127 に設定します。
view.setUint8(1, 255); // 2 番目のバイトを 255 に設定します。
view.setInt16(2, 32767); // 3 番目と 4 番目のバイトを 32767 に設定します。

aliRtcEngine
  .sendMediaExtensionMsg(buffer, 2)
  .then(() => {
    console.log(
      'SEI が送信されます。内容は 7fff7fff で、2 回繰り返されます。payloadType は 5 です。', // SEIが送信されます。コンテンツは7fff7fffで、2回繰り返されます。payloadTypeは5です。
    );
  })
  .catch((err: Error) => {
    message.error(err.message);
  });

SEI を使用する場合、音声データとビデオデータのトンネルを再利用する必要があります。 そのため、カスタムメッセージが送信される頻度とメッセージの長さを制御する必要があります。 以下の点に注意してください。

  • SEI は H.264 または H.265 ストリームで送信されるため、1 秒あたり最大 profile メッセージを送信できます。 エンコードされたビデオフレームのみが追加情報を伝送できます。

  • メディアデータの伝送品質を確保するために、カスタムメッセージの本文の長さは 4,000 バイトに制限されており、少量の情報しか伝送できません。

  • sendMediaExtensionMsg 関数の repeatCount パラメーターは、カスタムメッセージの冗長性を指定します。 値が 1 より大きい場合、メッセージは複数回送信され、ネットワークパケット損失によるメッセージ損失を防ぎます。 この場合、チャンネル内の他のユーザーもメッセージを複数回受信します。 そのため、メッセージの重複を排除する必要があります。

  • リレーライブストリーミング中、チャンネルのサブスクライバーは、送信したカスタムメッセージも受信できます。

  • 一度に送信される SEI は 1 つだけです。 sendMediaExtensionMsg を複数回呼び出すと、新しい呼び出しのデータが以前の呼び出しのデータを上書きします。

SEI を受信する

環境を確認する

クライアント環境が SEI をサポートしているかどうかを確認します。 環境が SEI をサポートしていない場合は、この機能を有効にしないでください。

// 静的メソッドを呼び出します。
const result = AliRtcEngine.isSupported();
if (!result.detail.isSendMediaExtensionMsgSupported) {
  console.log('お使いのブラウザは sei をサポートしていません。'); // お使いのブラウザは sei をサポートしていません。
}

SEI を受信する

この機能を有効にすると、クライアントのパフォーマンスオーバーヘッドが増加します。 SEI を受信するには、チャンネルに参加する前に setEnableMediaExtensionMsg を呼び出します。

// AliRtcEngine インスタンスが作成されていることを確認します。
// mediaExtensionMsgReceived イベントをリッスンします。
aliRtcEngine.on('mediaExtensionMsgReceived', (remoteUserId, data, payloadType) => {
  console.log(`ユーザー ${remoteUserId} は、payloadType が ${payloadType} で、内容が xxx である SEI メッセージを送信します。`, data); // ユーザー ${remoteUserId} は、payloadType が ${payloadType} で、内容が xxx である SEI メッセージを送信します。
});