RTCRtpScriptTransform

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Das RTCRtpScriptTransform-Interface der WebRTC API wird verwendet, um einen WebRTC Encoded Transform (ein TransformStream, das in einem Worker-Thread ausgeführt wird) in die WebRTC-Sender- und Empfänger-Pipelines einzufügen.

Konstruktor

RTCRtpScriptTransform()

Erstellt eine neue Instanz des RTCRtpScriptTransform-Objekts.

Instanzeigenschaften

Keine.

Instanzmethoden

Keine.

Beschreibung

RTCRtpScriptTransform-Instanzen werden mit einem Worker konstruiert, in dem der Transformstream-Code ausgeführt wird, zusammen mit einem (optional) options-Objekt und einem Array von übertragbaren Objekten, die an den Worker übergeben werden. Sie werden dann den eingehenden und ausgehenden RTC-Pipelines hinzugefügt, indem sie dem RTCRtpReceiver.transform und dem RTCRtpSender.transform zugewiesen werden.

Beim Erstellen dieses Objekts und immer, wenn ein kodierter Frame eintrifft, wird das rtctransform-Ereignis auf dem Worker-Globalobjekt ausgelöst. Die transformer-Eigenschaft des Ereignisses ist ein RTCRtpScriptTransformer, das Pendant auf der Worker-Seite zum RTCRtpScriptTransform im Hauptthread. Dieser verfügt über readable (ReadableStream) und writable (WritableStream) Eigenschaften, die vom Hauptthread RTCRtpScriptTransform geteilt wurden – wo sie nicht öffentlich sind. Wenn das entsprechende RTCRtpScriptTransform mit einem RTCRtpReceiver verwendet wird, dann reiht readable eingehende kodierte Audio- oder Video-Frames vom Paketisierer ein. Wenn es mit RTCRtpSender verwendet wird, enthält readable Frames, die von einem Codec kommen.

Der rtctransform-Ereignishandler im Worker-Thread definiert eine Pipe-Kette. Diese leitet kodierte Frames von event.transformer.readable durch einen TransformStream, der die Transformationsfunktion definiert, zu event.transformer.writable. event.transformer hat auch das options-Objekt, das vom RTCRtpScriptTransform-Konstruktor übergeben wurde (falls definiert), welches verwendet werden kann, um die Quelle des Ereignisses zu bestimmen, und somit den spezifischen TransformStream zur Kette hinzuzufügen.

Beispiele

Beachten Sie, dass diese Beispiele zeigen, wie RTCRtpScriptTransform definiert und verwendet wird. Der Transforschungscode im Worker-Thread wird als Teil eines umfassenderen Beispiels in Using WebRTC Encoded Transforms behandelt.

Hinzufügen einer Transformation für ausgehende Frames

Dieses Beispiel zeigt, wie Sie Videostreams von einer Webcam eines Nutzers über WebRTC streamen können, wobei ein WebRTC-kodierter Transform hinzugefügt wird, um die ausgehenden Streams zu modifizieren. Der Code geht davon aus, dass es eine RTCPeerConnection namens peerConnection gibt, die bereits mit einem entfernten Peer verbunden ist.

Zuerst erhält man einen MediaStreamTrack, indem getUserMedia() verwendet wird, um einen Video-MediaStream von einem Mediengerät zu erhalten und dann die Methode MediaStream.getTracks(), um den ersten MediaStreamTrack im Stream zu bekommen.

Der Track wird mit addTrack() zur Peer-Verbindung hinzugefügt und gesendet. Die Methode addTrack() gibt den RTCRtpSender zurück, der verwendet wird, um den Track zu senden.

js
// Get Video stream and MediaTrack
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const [track] = stream.getTracks();
const videoSender = peerConnection.addTrack(track, stream);

Ein RTCRtpScriptTransform wird dann konstruiert, indem ein Worker-Skript übergeben wird, das die Transformation definiert, sowie ein optionales Objekt, das verwendet werden kann, um beliebige Nachrichten an den Worker zu übergeben (in diesem Fall haben wir eine name-Eigenschaft mit dem Wert "senderTransform" verwendet, um dem Worker mitzuteilen, dass diese Transformation dem ausgehenden Stream hinzugefügt wird). Wir fügen dann die Transformation dem Sender hinzu, indem wir sie der RTCRtpSender.transform-Eigenschaft zuweisen.

js
// Create a worker containing a TransformStream
const worker = new Worker("worker.js");
videoSender.transform = new RTCRtpScriptTransform(worker, {
  name: "senderTransform",
});

Beachten Sie, dass Sie die Transformation jederzeit hinzufügen können. Jedoch stellt das sofortige Hinzufügen nach dem Aufruf von addTrack() sicher, dass die Transformation den ersten kodierten Frame erhält, der gesendet wird.

Hinzufügen einer Transformation für eingehende Frames

Dieses Beispiel zeigt, wie Sie eine WebRTC-kodierte Transformation hinzufügen, um einen eingehenden Stream zu modifizieren. Der Code geht davon aus, dass es eine RTCPeerConnection namens peerConnection gibt, die bereits mit einem entfernten Peer verbunden ist.

Zuerst fügen wir einen track-Ereignishandler der RTCPeerConnection hinzu, um das Ereignis abzufangen, wenn ein neuer Track gestreamt wird. Innerhalb des Handlers konstruieren wir ein RTCRtpScriptTransform und fügen es dem event.receiver.transform hinzu (event.receiver ist ein RTCRtpReceiver). Wie im vorherigen Beispiel nimmt der Konstruktor ein Objekt mit der name-Eigenschaft: hier verwenden wir jedoch receiverTransform als Wert, um dem Worker mitzuteilen, dass Frames vom Paketisierer eingehen.

js
peerConnection.ontrack = (event) => {
  const worker = new Worker("worker.js");
  event.receiver.transform = new RTCRtpScriptTransform(worker, {
    name: "receiverTransform",
  });
  received_video.srcObject = event.streams[0];
};

Beachten Sie erneut, dass Sie den Transformstream jederzeit hinzufügen können. Durch das Hinzufügen im track-Ereignishandler wird jedoch sichergestellt, dass der Transformstream den ersten kodierten Frame für den Track erhält.

Spezifikationen

Specification
WebRTC Encoded Transform
# rtcrtpscripttransform

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch