RTCRtpSender: transform property

Limited availability

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

The transform property of the RTCRtpSender object is used to insert a transform stream (TransformStream) running in a worker thread into the sender pipeline. This allows stream transforms to be applied to encoded video and audio frames after they are output by a codec, and before they are sent.

The transform that is to be added is defined using an RTCRtpScriptTransform and its associated Worker. If the transform is set synchronously immediately after creating the RTCRtpSender it will receive the first full frame generated by the sender's encoder.

Value

A RTCRtpScriptTransform, or null if the sender has no associated transform stream.

Example

This example shows how you might stream video from a user's webcam over WebRTC, adding a WebRTC encoded transform to modify the outgoing streams. Note that this is part of a larger example in the guide topic Using WebRTC Encoded Transforms.

The code assumes that there is an RTCPeerConnection called peerConnection that is already connected to a remote peer. It first gets a MediaStreamTrack, using getUserMedia() to get a video MediaStream from a media device, and then the MediaStream.getTracks() method to get the first MediaStreamTrack in the stream.

The track is added to the peer connection using addTrack(). This returns a new RTCRtpSender that will be used to send it.

js
const mediaStream = await navigator.mediaDevices.getUserMedia({ video: true });
const [track] = mediaStream.getTracks();
const videoSender = peerConnection.addTrack(track, mediaStream);

The code above sets up the connection and starts sending the track. To add a transform stream into the pipeline we need to construct an RTCRtpScriptTransform and assign it to the sender's transform property. As the transform is constructed immediately after creation of the RTCRtpSender, it will receive the first frame generated by the sender's encoder, before it is sent.

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

Note that you can add the transform at any time. However by adding it immediately after calling addTrack() the transform will get the first encoded frame that is sent.

Specifications

Specification
WebRTC Encoded Transform
# dom-rtcrtpsender-transform

Browser compatibility

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
transform

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
See implementation notes.

See also