RTCRtpScriptTransformer: sendKeyFrameRequest() 方法
RTCRtpScriptTransformer 介面的 sendKeyFrameRequest() 方法可以由處理傳入的編碼影片幀的 WebRTC 編碼轉換 呼叫,以從傳送方請求關鍵幀。
該方法只能在接收影片(而不是音訊)幀時呼叫,並且如果出於任何原因,接收方無法在沒有新關鍵幀的情況下解碼影片。請注意,使用者代理可以決定不必要請求關鍵幀,在這種情況下,即使請求未實際傳送,返回的 Promise 也會 fulfilled。
注意: 例如,當新使用者加入 WebRTC 會議時,可能會呼叫此方法,以減少他們接收關鍵幀並因此開始顯示影片所需的時間。有關更多資訊,請參閱使用 WebRTC 編碼轉換中的 觸發關鍵幀。
語法
sendKeyFrameRequest()
引數
無。
返回值
一個 Promise,它在請求傳送後(或使用者代理決定不需要傳送後)以 undefined fulfilled。
異常
InvalidStateError-
解包器未處理影片資料包,或為
undefined。
示例
下面的示例展示了正在接收編碼影片的 WebRTC 應用程式的主執行緒如何將解密金鑰傳遞給接收方轉換,並請求傳送方發出關鍵幀。
請注意,主執行緒無法直接訪問 RTCRtpScriptTransformer 物件,因此需要將金鑰傳遞給工作執行緒。在這裡,我們使用 MessageChannel 來實現這一點,將第二個埠傳輸到在工作執行緒中執行的轉換程式碼。程式碼假設已存在對等連線,並且 videoReceiver 是一個 RTCRtpReceiver。
const worker = new Worker("worker.js");
const channel = new MessageChannel();
videoReceiver.transform = new RTCRtpScriptTransform(
worker,
{ name: "receiverTransform", port: channel.port2 },
[channel.port2],
);
// Post new key to the receiver
channel.port1.start();
channel.port1.postMessage({
key: "93ae0927a4f8e527f1gce6d10bc6ab6c",
});
工作執行緒中的 rtctransform 事件處理程式將埠作為 event.transformer.options.port 獲取。下面的程式碼片段展示瞭如何使用它來監聽通道上的 message 事件。如果收到事件,處理程式將獲取 key,然後呼叫轉換器上的 sendKeyFrameRequest()。
event.transformer.options.port.onmessage = (event) => {
const { key } = event.data;
// key is used by the transformer to decrypt frames (not shown)
// Request sender to emit a key frame.
// Here 'rcEvent' is the rtctransform event.
rcEvent.transformer.sendKeyFrameRequest();
};
規範
| 規範 |
|---|
| WebRTC Encoded Transform # dom-rtcrtpscripttransformer-sendkeyframerequest |
瀏覽器相容性
載入中…