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 メッセージを送信します。
});