Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. Web-APIs
  3. RTCRtpScriptTransformer

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

View in EnglishAlways switch to English

RTCRtpScriptTransformer

Baseline 2025 *
Newly available

Since October 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

* Some parts of this feature may have varying levels of support.

DasRTCRtpScriptTransformer Interface derWebRTC API bietet eine worker-seitigeStream API Schnittstelle, die von einemWebRTC Encoded Transform verwendet werden kann, um kodierte Medien-Frames in den eingehenden und ausgehenden WebRTC-Pipelines zu modifizieren.

Hinweis:Diese Funktion ist indedizierten Web Workern verfügbar.

Instanzeigenschaften

RTCRtpScriptTransformer.readableSchreibgeschützt

EinReadableStream, auf dem kodierte Frames aus den WebRTC-Sender- oder -Empfänger-Pipelines eingereiht werden können.

RTCRtpScriptTransformer.writableSchreibgeschützt

EinWritableStream, auf den kodierte Frames übertragen werden sollen.

RTCRtpScriptTransformer.optionsSchreibgeschützt

Optionen, die vomRTCRtpScriptTransform constructor übergeben werden und verwendet werden, um den Transformationscode basierend darauf zu konfigurieren, ob eingehende oder ausgehende Frames verarbeitet werden.

Instanzmethoden

RTCRtpScriptTransformer.generateKeyFrame()

Fordert einen Video-Encoder auf, ein Schlüsselbild zu erzeugen. Kann von einem Transformer in der Sender-Pipeline aufgerufen werden, wenn ausgehende Frames verarbeitet werden.

RTCRtpScriptTransformer.sendKeyFrameRequest()

Fordert den Sender auf, ein Schlüsselbild zu senden. Kann von einem Transformer in der Empfänger-Pipeline aufgerufen werden, wenn eingehende kodierte Videoframes verarbeitet werden.

Beschreibung

EineRTCRtpScriptTransformer-Instanz wird als Teil der Konstruktion eines zugehörigenRTCRtpScriptTransform erstellt, der den Worker angibt, in dem der Transformer erstellt wird, und Optionen, die ihm übergeben werden.

Der Transformer wird einem Worker durch diertctransform Ereignis-transformer-Eigenschaft zur Verfügung gestellt. Dieses Ereignis wird bei der Konstruktion des zugehörigenRTCRtpScriptTransform und wenn ein kodierter Frame aus einem Codec (ausgehend) oder vom Paketierer (eingehend) auf derRTCRtpScriptTransformer.readable eingereiht wird, ausgelöst.

Der Transformer bietet einenreadable undwritable Stream im Worker an sowie einoptions Objekt, das bei der Konstruktion demRTCRtpScriptTransform übergeben wurde. Wenn das zugehörigeRTCRtpScriptTransform einemRTCRtpSender oderRTCRtpReceiver zugewiesen wird, werden kodierte Medien-Frames aus den WebRTC-Sender- oder -Empfänger-Pipelines auf denreadable Stream eingereiht.

Ein WebRTC Encoded Transform muss kodierte Frames vontransformer.readable lesen, sie bei Bedarf modifizieren und in derselben Reihenfolge, ohne jegliche Duplikation, auftransformer.writable schreiben. Dietransformer.options erlauben die Verwendung einer geeigneten Transformationsfunktion, basierend darauf, ob die kodierten Medien-Frames eingehend oder ausgehend sind. Die Transformation wird normalerweise implementiert, indem Frames vomreadable Stream durch eine oder mehrereTransformStream Instanzen auf denwritable Stream geleitet und dabei bei Bedarf transformiert werden.

Das Interface bietet auch Methoden für einen Sender, ein Video-Encoder zu veranlassen, ein neues Schlüsselbild zu erzeugen, oder für einen Empfänger, ein neues Schlüsselbild vom Encoder des Senders anzufordern (Video-Encoder senden üblicherweise ein Schlüsselbild, das die vollständige Information zum Erstellen eines Bildes enthält, und senden anschließend Delta-Frames, die nur die Informationen enthalten, die sich seit dem vorherigen Frame geändert haben).

Diese Methoden sind in Fällen erforderlich, in denen ein Empfänger nicht in der Lage wäre, eingehende Frames zu dekodieren, bis sie ein neues Schlüsselbild erhalten. Zum Beispiel wird ein neuer Teilnehmer an einem Konferenzgespräch das Video nicht sehen können, bis er ein neues Schlüsselbild erhalten hat, da Delta-Frames nur dekodiert werden können, wenn das letzte Schlüsselbild und alle nachfolgenden Delta-Frames vorhanden sind. Ähnlich ist es, wenn Frames für einen Empfänger verschlüsselt sind, werden sie die Frames erst dekodieren können, sobald sie ihr erstes verschlüsseltes Schlüsselbild erhalten haben.

Beispiele

Dieses Beispiel zeigt den Code für einen WebRTC Encoded Transform, der in einem Worker läuft.

Der Code verwendetaddEventListener(), um eine Handlerfunktion für dasrtctransform Ereignis zu registrieren, welches dasRTCRtpScriptTransformer alsevent.transformer verfügbar macht.

Der Handler erstellt einenTransformStream und leitet Frames vomevent.transformer.readable durch ihn aufevent.transformer.writable. Dietransform() Implementierung des Transform-Streams wird für jedes kodierte Frame aufgerufen, das in die Warteschlange des Streams gesetzt wird: sie kann die Daten vom Frame lesen und in diesem Fall die Bytes negieren und dann das modifizierbare Frame in die Warteschlange des Streams einreihen.

js
addEventListener("rtctransform", (event) => {  const transform = new TransformStream({    start() {}, // Called on startup.    flush() {}, // Called when the stream is about to be closed.    async transform(encodedFrame, controller) {      // Reconstruct the original frame.      const view = new DataView(encodedFrame.data);      // Construct a new buffer      const newData = new ArrayBuffer(encodedFrame.data.byteLength);      const newView = new DataView(newData);      // Negate all bits in the incoming frame      for (let i = 0; i < encodedFrame.data.byteLength; ++i) {        newView.setInt8(i, ~view.getInt8(i));      }      encodedFrame.data = newData;      controller.enqueue(encodedFrame);    },  });  event.transformer.readable    .pipeThrough(transform)    .pipeTo(event.transformer.writable);});

Besonderheiten des oben genanntenTransformStream ist, dass er kodierte Medien-Frames (RTCEncodedVideoFrame oderRTCEncodedAudioFrame) anstelle von beliebigen "Chunks" in die Warteschlange setzt und dass diewritableStrategy- undreadableStrategy-Eigenschaften nicht definiert sind (da die Einreihestrategie vollständig vom Nutzeragenten verwaltet wird).

Eine Transformation kann entweder in den eingehenden oder ausgehenden WebRTC-Pipelines ausgeführt werden. Dies spielt bei dem obigen Code keine Rolle, da derselbe Algorithmus sowohl im Sender verwendet werden kann, um die Frames zu negieren, als auch im Empfänger, um sie zurückzusetzen. Wenn die Sender- und Empfänger-Pipelines einen anderen Transformationsalgorithmus anwenden müssen, müssen Informationen über die aktuelle Pipeline vom Haupt-Thread übergeben werden. Dies geschieht durch Festlegen einesoptions-Arguments im entsprechendenRTCRtpScriptTransform constructor, welches dann im Worker inRTCRtpScriptTransformer.options verfügbar gemacht wird.

Unten verwenden wir dietransformer.options, um entweder eine Sendertransformation oder eine Empfängertransformation auszuwählen. Beachten Sie, dass die Eigenschaften des Objekts beliebig sind (vorausgesetzt, die Werte können serialisiert werden) und es auch möglich ist, einenMessageChannel zu übertragen und ihn zu verwenden, umzur Laufzeit mit einer Transformation zu kommunizieren, um beispielsweise Verschlüsselungsschlüssel zu teilen.

js
// Code to instantiate transform and attach them to sender/receiver pipelines.onrtctransform = (event) => {  let transform;  if (event.transformer.options.name === "senderTransform")    transform = createSenderTransform();  // returns a TransformStream (not shown)  else if (event.transformer.options.name === "receiverTransform")    transform = createReceiverTransform();  // returns a TransformStream (not shown)  else return;  event.transformer.readable    .pipeThrough(transform)    .pipeTo(event.transformer.writable);};

Beachten Sie, dass der obige Code Teil von umfassenderen Beispielen ist, die inUsing WebRTC Encoded Transforms bereitgestellt werden.

Spezifikationen

Specification
WebRTC Encoded Transform
# rtcrtpscripttransformer

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2026 Movatter.jp