RTCRtpScriptTransformer:generateKeyFrame() 方法
generateKeyFrame() 方法是 RTCRtpScriptTransformer 介面的一部分,它會強制影片編碼器生成一個關鍵幀。
語法
generateKeyFrame()
generateKeyFrame(rid)
引數
rid可選-
一個字串,包含必須生成新關鍵幀的流/編碼器的“限制識別符號”(“RID”)。
該值必須介於 1 到 255 個字元(含)之間,並且只能包含字母數字字元、下劃線和連字元(
A-Z、a-z、0-9、-、_)。RID 區分大小寫,並且在對等通訊通道中必須是唯一的。將使用第一個匹配指定
rid的編碼器。如果沒有編碼器匹配rid,則將使用第一個編碼器,並將rid設定為該編碼器的限制。
返回值
一個 Promise,它會在幀的時間戳處fulfilled,或者在發生異常時rejected。
異常
InvalidStateError-
編碼器未處理影片幀,或為
undefined。 TypeError-
提供的
rid不符合語法要求。 NotFoundError-
沒有影片編碼器。如果對應的
RTCRtpSender不活躍或其軌道已結束,可能會丟擲此錯誤。
描述
正在處理出站編碼影片幀的轉換器可以呼叫此方法,以強制傳送新的完整(關鍵)幀。這可能對於加密幀的 WebRTC 編碼轉換 是必需的,以確保在新增新的加密金鑰時,儘快傳送使用該金鑰加密的關鍵幀。
傳送方可以指定 RID(也稱為“限制識別符號”或“RTP 流 ID”)來控制哪個編解碼器生成新的關鍵幀。一個流可能包含同一源的多個版本(simulcast),每個版本具有不同的屬性,例如解析度和幀率。RID 用於指示特定的 RTP 流,從而指示需要生成新幀的編碼器。請注意,可用的 RID 值在建立連線所使用的收發器時設定。可以透過呼叫 RTCRtpSender.getParameters() 並檢查返回值的 encodings 屬性來查詢正在使用的 RID 值。
該方法返回的 Promise 將在將相應的關鍵幀排隊到 RTCRtpScriptTransformer 可讀流之前 resolve。
注意:一次傳送多個流(RID)稱為“simulcast”。此功能為 middlebox 提供同一流的多個影片質量級別,允許它透過選擇性地將適當的級別傳輸給參與者來管理頻寬,並快速動態地切換解析度(即,將所有人的影片切換為低質量,除了活動發言者)。接收方只獲取一個流,這就是為什麼可比的接收方方法 RTCRtpScriptTransformer.sendKeyFrameRequest() 不需要指定 RID。
示例
傳送關鍵幀
下面的示例展示了主執行緒如何將加密金鑰傳遞給傳送轉換器,並觸發編解碼器生成關鍵幀。
請注意,主執行緒無法直接訪問 RTCRtpScriptTransformer 物件,因此需要將金鑰和 RID 傳遞給工作執行緒。在這裡,我們透過 MessageChannel 實現這一點,將第二個埠傳輸到在工作執行緒中執行的轉換器程式碼。程式碼假定已存在一個對等連線,並且 videoSender 是一個 RTCRtpSender。
const worker = new Worker("worker.js");
const channel = new MessageChannel();
videoSender.transform = new RTCRtpScriptTransform(
worker,
{ name: "senderTransform", port: channel.port2 },
[channel.port2],
);
// Post RID and new key to the sender
channel.port1.start();
channel.port1.postMessage({
rid: "1",
key: "93ae0927a4f8e527f1gce6d10bc6ab6c",
});
工作執行緒中的 rtctransform 事件處理程式獲取埠,並使用它監聽 message 事件。如果收到事件,它將獲取 rid 和 key,然後呼叫 generateKeyFrame()。
event.transformer.options.port.onmessage = (event) => {
const { rid, key } = event.data;
// key is used by the transformer to encrypt frames (not shown)
// Get codec to generate a new key frame using the rid
// Here 'rcEvent' is the rtctransform event.
rcEvent.transformer.generateKeyFrame(rid);
};
規範
| 規範 |
|---|
| WebRTC Encoded Transform # dom-rtcrtpscripttransformer-generatekeyframe |
瀏覽器相容性
載入中…