RTCRtpScriptTransformer: generateKeyFrame() Methode
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Die generateKeyFrame()
Methode der RTCRtpScriptTransformer
Schnittstelle veranlasst einen Video-Encoder, ein Schlüsselbild zu erzeugen.
Syntax
generateKeyFrame()
generateKeyFrame(rid)
Parameter
rid
Optional-
Ein String, der die "Einschränkungskennung" ("RID") des Streams/Encoders enthält, der das neue Schlüsselbild erzeugen muss.
Der Wert muss zwischen 1 und 255 Zeichen (einschließlich) enthalten und darf nur alphanumerische Zeichen, Unterstriche und Bindestriche (
A-Z
,a-z
,0-9
,-
,_
) enthalten. RIDs sind groß- und kleinschreibungssensitiv und müssen eindeutig für den Peer-Kommunikationskanal sein.Der erste Encoder, der zur angegebenen
rid
passt, wird verwendet. Wenn kein Encoder zurrid
passt, wird der erste Encoder verwendet undrid
wird auf die Einschränkungen des Encoders gesetzt.
Rückgabewert
Ein Promise
, das mit dem Zeitstempel des Bildes erfüllt wird oder mit einem Ausnahmefehler abgelehnt wird.
Ausnahmen
InvalidStateError
-
Der Encoder verarbeitet keine Videobilder oder ist
undefined
. TypeError
-
Die bereitgestellte
rid
entspricht nicht den Grammatikanforderungen. NotFoundError
-
Es gibt keine Video-Encoder. Dies könnte auftreten, wenn der entsprechende
RTCRtpSender
nicht aktiv ist oder sein Track beendet wurde.
Beschreibung
Diese Methode kann von einem Transformator aufgerufen werden, der ausgehende, kodierte Videobilder verarbeitet, um zu erzwingen, dass ein neues vollständiges (Schlüssel-)Bild gesendet wird. Dies könnte von einem WebRTC Encoding-Transform benötigt werden, das Bilder verschlüsselt, um sicherzustellen, dass, falls ein neuer Verschlüsselungsschlüssel hinzugefügt wird, ein mit diesem Schlüssel verschlüsseltes Schlüsselbild so schnell wie möglich gesendet wird.
Der Sender kann eine RID angeben (auch als "Einschränkungskennung" oder "RTP-Stream-ID" bezeichnet), um zu steuern, welcher Codec das neue Schlüsselbild erzeugt.
Ein Stream könnte (Simulcast) mehrere Versionen derselben Quelle enthalten, jede mit unterschiedlichen Eigenschaften wie Auflösung und Bildrate.
Die RID wird verwendet, um einen bestimmten RTP-Stream und damit den Encoder anzugeben, der ein neues Bild erzeugen muss.
Bitte beachten Sie, dass die verfügbaren RID-Werte beim Erstellen des vom Anschluss verwendeten Transceivers festgelegt werden.
Die verwendeten RID-Werte können abgefragt werden, indem RTCRtpSender.getParameters()
aufgerufen wird und die encodings
Eigenschaft des zurückgegebenen Wertes inspiziert wird.
Das von der Methode zurückgegebene Promise wird kurz vor der Einreihung des entsprechenden Schlüsselbildes in einen RTCRtpScriptTransformer
lesbar erfüllt.
Hinweis:
Das gleichzeitige Senden mehrerer Streams (RID) wird als "Simulcast" bezeichnet.
Diese Funktion bietet einer Mittelbox denselben Stream in mehreren Qualitätsstufen, sodass sie Bandbreite verwalten kann, indem sie geeignete Stufen selektiv an Teilnehmer überträgt und die Auflösung schnell wechseln kann (z. B. um Videos mit niedriger Qualität an alle außer den aktiven Sprecher zu senden).
Der Empfänger erhält nur einen Stream, weshalb die vergleichbare Empfangsmethode RTCRtpScriptTransformer.sendKeyFrameRequest()
nicht erfordert, dass eine RID angegeben wird.
Beispiele
Senden eines Schlüsselbildes
Das folgende Beispiel zeigt, wie der Haupt-Thread einen Verschlüsselungsschlüssel an einen Sender-Transformator übergeben und den Codec zur Erzeugung eines Schlüsselbildes veranlassen könnte.
Beachten Sie, dass der Haupt-Thread keinen direkten Zugriff auf das RTCRtpScriptTransformer
Objekt hat und daher den Schlüssel und die RID an den Worker übergeben muss.
Hier tun wir das mit einem MessageChannel
, indem wir den zweiten Port an den im Worker laufenden Transformatorcode übertragen.
Der Code geht davon aus, dass bereits eine Peer-Verbindung besteht und videoSender
ein RTCRtpSender
ist.
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",
});
Der rtctransform
Ereignishandler im Worker erhält den Port und verwendet ihn, um auf message
-Ereignisse zu hören.
Wenn ein Ereignis empfangen wird, holt es sich die rid
und den key
, und ruft dann generateKeyFrame()
auf.
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);
};
Spezifikationen
Specification |
---|
WebRTC Encoded Transform # dom-rtcrtpscripttransformer-generatekeyframe |