- From: Jan-Ivar Bruaroey <notifications@github.com>
- Date: Mon, 13 Sep 2021 13:24:10 -0700
- To: whatwg/streams <streams@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/streams/issues/1157/918547406@github.com>
> Say we use a renderer and an encoder and are using tee as these are two different consumers.
> Renderer processes at 60 fps, encoder processes at 30 fps.
I have this [working in Chrome now](https://jsfiddle.net/jib1/hade3nf7/). Self-view is 30 fps for me which is all my camera can muster, and encoder is 15 fps from induced delay, but the self-view stays smooth, even when the encoder struggles.
Dropping frames in a TransformStream turned out to be trivial:
```js
function FrameDropper() {
return new TransformStream({
transform(frame, controller) {
if (controller.desiredSize < 2) {
frame.close();
} else {
controller.enqueue(frame);
}
}
}, {highWaterMark: 1}, {highWaterMark: 2});
}
```
I couldn't use `{highWaterMark: 0}, {highWaterMark: 1}` because that would stall due to #1158 so the encoder is a frame behind. Depending on how #1158 is resolved, perhaps we could get to `{highWaterMark: 0}, {highWaterMark: 0}` even?
I also use @MattiasBuelens's `tee({synchronized: true})` polyfill from [above](https://github.com/whatwg/streams/issues/1157#issuecomment-893769058), which I think provides a predictable baseline for video work. I modified it to be `tee({synchronized: true, structuredClone: true})` because #1156, or Chrome would error about closed frames.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/streams/issues/1157#issuecomment-918547406
Received on Monday, 13 September 2021 20:24:23 UTC