全部產品
Search
文件中心

Intelligent Media Services:SEI

更新時間:Jun 17, 2025

阿里雲ARTC Web SDK支援發送和接收SEI(Supplemental Enhancement Information)資訊。當您需要將自訂訊息從ARTC系統傳輸到阿里雲CDN直播或第三方直播平台時,可以使用此功能來實現。

使用說明

SEI的使用情境包括但不限於:

  • 傳遞時間戳記以計算網路延遲或同步資料。

  • 傳遞描述資訊(最多4k Byte),建議使用JSON或純字串。

  • 內部使用SEI擴充協議來實現。

發送SEI

檢測環境

檢測當前環境是否支援發送和接收SEI,不支援時請勿開啟。

// 靜態方法
const result = AliRtcEngine.isSupported();
if (!result.detail.isSendMediaExtensionMsgSupported) {
  console.log('Your browser does not support sei.');
}

發送SEI

啟用其能力會增加用戶端效能開銷,如需發送SEI,需要在加入頻道之前調用setEnableMediaExtensionMsg

// 前提:需要先建立引擎執行個體
// 是否啟用媒體擴充,需要在加入房間之前調用
aliRtcEngine.setEnableMediaExtensionMsg(true);

// 假設使用 SEI 發送 DataView 對象
const buffer = new ArrayBuffer(4);
const view = new DataView(buffer);

// 使用 DataView 設定 ArrayBuffer 的內容,內容為 7f ff 7f ff
view.setInt8(0, 127); // 設定第一個位元組為 127
view.setUint8(1, 255); // 設定第二個位元組為 255
view.setInt16(2, 32767); // 設定第三和第四個位元組為 32767

aliRtcEngine
  .sendMediaExtensionMsg(buffer, 2)
  .then(() => {
    console.log(
      '發送 SEI 成功,內容為 `7fff7fff`,重複 2 次,payloadType 為 5',
    );
  })
  .catch((err: Error) => {
    message.error(err.message);
  });

使用媒體擴充資訊時需要複用音視頻資料通道,因此必須控制自訂訊息的發送頻率和訊息資料長度,使用限制如下:

  • 每秒最多發送profile條訊息,因為SEI資訊是放到H.264/H.265流中傳輸,有視訊框架編碼才能附加擴充資訊。

  • 為了不影響媒體資料的傳輸品質,自訂訊息體長度限制為4k Byte,可以用來傳輸少量資訊。

  • sendMediaExtensionMsg函數中repeatCount參數為自訂訊息冗餘度,若大於1,則會發送多次,防止網路丟包導致的訊息丟失,此時頻道裡的其他人也會收到多次相同的訊息,需要進行去重。

  • 發送的自訂訊息,在旁路直播時,頻道裡的訂閱者也會收到。

  • 同一時間只有一條媒體擴充資訊在傳輸,多次調用sendMediaExtensionMsg,新調用的資料會覆蓋前一次的資料。

接收SEI

檢測環境

接收SEI的端也需要檢測環境是否支援SEI,不支援時請勿開啟。

// 靜態方法
const result = AliRtcEngine.isSupported();
if (!result.detail.isSendMediaExtensionMsgSupported) {
  console.log('Your browser does not support sei.');
}

接收SEI

啟用其能力會增加用戶端效能開銷,如需接收SEI,需要在加入頻道之前調用setEnableMediaExtensionMsg

// 前提:需要先建立引擎執行個體
// 監聽事件 mediaExtensionMsgReceived
aliRtcEngine.on('mediaExtensionMsgReceived', (remoteUserId, data, payloadType) => {
  console.log(`使用者 ${remoteUserId} 發送了 payloadType 為 ${payloadType} 的 SEI,內容為`, data);
});