阿里雲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);
});