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.
// 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.
// 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.
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