demo · v139
Encoded Frame Audio Level Meter
Each encoded audio frame carries an audioLevel field (0–127 dBov). Pipelines doing per-frame transforms can read it without decoding. Click "Start" to mic-test against a real getUserMedia stream — the meter and trace render the level frame by frame.
Click "Start" to request mic permission.
the code
const sender = pc.getSenders().find(s => s.track.kind === "audio");
const encodedStream = sender.createEncodedStreams();
const transformer = new TransformStream({
transform(frame, ctl) {
const md = frame.getMetadata();
// v139: md.audioLevel is 0..127 dBov (lower = louder)
levelMeter.update(md.audioLevel);
ctl.enqueue(frame);
}
});
encodedStream.readable.pipeThrough(transformer).pipeTo(encodedStream.writable);