- From: Domenic Denicola <notifications@github.com>
- Date: Fri, 12 Aug 2016 14:19:45 -0700
- To: whatwg/streams <streams@noreply.github.com>
- Message-ID: <whatwg/streams/pull/504/c239562465@github.com>
Those are both great ideas. So if desiredSize is low (e.g. negative) then we're accumulating too much buffered data and we can afford a higher bitrate, basically. Something like this, perhaps?
```js
const STARTING_BIT_RATE = 131072; // 1 Mbps
const DEFAULT_CHUNK_SIZE = 65536; // 64 KiB
const PREFERRED_QUEUED_SIZE = 10485760; // 10 MiB
function makeReadableVideoSocketStream(host, port) {
const socket = createUDPSocket(host, port);
return new ReadableStream({
type: "bytes",
start(controller) {
socket.send(createSetBitrateMessage(STARTING_BIT_RATE));
readRepeatedly().catch(e => controller.error(e));
function readRepeatedly() {
return socket.select2().then(() => {
// Since the socket can become readable even when there’s
// no pending BYOB requests, we need to handle both cases.
let bytesRead;
if (controller.byobRequest) {
const v = controller.byobRequest.view;
bytesRead = socket.readInto(v.buffer, v.byteOffset, v.byteLength);
controller.byobRequest.respond(bytesRead);
} else {
const buffer = new ArrayBuffer(DEFAULT_WINDOW_SIZE);
bytesRead = socket.readInto(buffer, 0, DEFAULT_WINDOW_SIZE);
controller.enqueue(new Uint8Array(buffer, 0, bytesRead));
}
if (bytesRead === 0) {
controller.close();
return;
}
// Adjust the bitrate according to how much data we have queued
// (If the queue is full, then we can up the bitrate for higher quality)
const newBitrate = determineBestBitrate(controller.desiredSize);
socket.send(createSetBitrateMessage(newBitrate));
return readRepeatedly();
});
}
}
pull(controller) {
// This is called when the internal queue has been drained, and the
// stream's consumer can accept more data. Recompute the best bitrate
// using the new desiredSize.
const newBitrate = determineBestBitrate(controller.desiredSize);
socket.send(createSetBitrateMessage(newBitrate));
},
cancel() {
socket.close();
}
}, {
highWaterMark: PREFERRED_QUEUED_SIZE
});
}
```
I am picturing people who actually work on adaptive video streaming cringing at this simplistic code, but it does kind of get the point across, I think...
--
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/pull/504#issuecomment-239562465
Received on Friday, 12 August 2016 21:20:25 UTC