demo · v130

Encoded frame metadata editor

The demo sets up a real local PeerConnection with an Encoded Transform on the sender. Mutate the per-frame metadata using setMetadata() and watch the before/after on the receiving side.

incoming raw metadata

(waiting)

after setMetadata()

(waiting)

the code

const sender = pc.getSenders()[0];
const { readable, writable } = new RTCRtpScriptTransform(worker, {});
sender.transform = new RTCRtpScriptTransform(worker, {});

// Inside the worker:
onrtctransform = (ev) => {
  const t = ev.transformer;
  t.readable.pipeThrough(new TransformStream({
    transform(frame, ctl) {
      const meta = frame.getMetadata();
      // v130: setMetadata exists and mutates in place.
      frame.setMetadata({
        ...meta,
        payloadType: 96,
        synchronizationSource: 1234567,
      });
      ctl.enqueue(frame);
    },
  })).pipeTo(t.writable);
};

see also