Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

RTCRtpScriptTransformer: Methode sendKeyFrameRequest()

Baseline 2025
Neu verfügbar

Seit Oktober 2025 funktioniert diese Funktion auf aktuellen Geräten und in aktuellen Browserversionen. Auf älteren Geräten oder in älteren Browsern funktioniert sie möglicherweise nicht.

Die Methode sendKeyFrameRequest() der Schnittstelle RTCRtpScriptTransformer kann von einer WebRTC Encoded Transform aufgerufen werden, die eingehende codierte Videoframes verarbeitet, um vom Sender einen Keyframe anzufordern.

Die Methode darf nur beim Empfang von Video-Frames (nicht Audioframes) aufgerufen werden und nur dann, wenn ein Empfänger das Video aus irgendeinem Grund ohne einen neuen Keyframe nicht decodieren kann. Beachten Sie, dass der User Agent entscheiden kann, dass die Anforderung eines Keyframes nicht nötig ist. In diesem Fall wird das zurückgegebene Promise erfüllt, obwohl die Anforderung nicht tatsächlich gesendet wurde.

Hinweis: Die Methode könnte beispielsweise aufgerufen werden, wenn ein neuer Benutzer einer WebRTC-Konferenz beitritt, um die Zeit zu verkürzen, bis er einen Keyframe empfängt und damit die Videoanzeige beginnen kann. Weitere Informationen finden Sie unter Einen Keyframe auslösen in „WebRTC Encoded Transforms verwenden“.

Syntax

js
sendKeyFrameRequest()

Parameter

Keine.

Rückgabewert

Ein Promise, das mit undefined erfüllt wird, sobald die Anforderung gesendet wurde oder der User Agent entschieden hat, dass dies nicht nötig ist.

Ausnahmen

InvalidStateError DOMException

Der De-Packetizer verarbeitet keine Videopakete oder ist undefined.

Beispiele

Das folgende Beispiel zeigt, wie der Hauptthread einer WebRTC-Anwendung, die codierte Videodaten empfängt, einen Entschlüsselungsschlüssel an eine Empfänger-Transform übergeben und den Sender auffordern kann, einen Keyframe zu senden.

Der Hauptthread hat keinen direkten Zugriff auf das Objekt RTCRtpScriptTransformer und muss den Schlüssel daher an den Worker übergeben. Hier verwenden wir dazu einen MessageChannel und übertragen den zweiten Port an den Transformer-Code, der im Worker ausgeführt wird. Der Code setzt voraus, dass bereits eine Peer-Verbindung besteht und videoReceiver ein RTCRtpReceiver ist.

js
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",
});

Der Event-Handler für rtctransform im Worker erhält den Port als event.transformer.options.port. Der folgende Codeausschnitt zeigt, wie dieser Port verwendet wird, um auf message-Events im Channel zu warten. Wenn ein Event empfangen wird, liest der Handler den key aus und ruft anschließend sendKeyFrameRequest() auf dem Transformer auf.

js
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();
};

Spezifikationen

Spezifikation
WebRTC Encoded Transform
# dom-rtcrtpscripttransformer-sendkeyframerequest

Browser-Kompatibilität

Siehe auch