[whatwg] Binary Streaming with XHR

Cyril Concolato cyril.concolato at telecom-paristech.fr
Fri Aug 24 06:49:34 PDT 2012

Hi Jussi,

In general, I like the idea of having streaming over XHR. Thanks for 
bringing it up. I have some comments/questions inline.

Le 8/24/2012 12:23 PM, Jussi Kalliokoski a écrit :
> Hello,
> I've got a little proposal to solve a problem we're facing with one of our
> codebases ( aurora.js [1], i.e. audio codecs in JavaScript ).
> We need to stream the audio files (you don't want to store a 2 hour long
> live stream in the memory or wait until a whole file is loaded before
> playing). Currently we're using partial requests to fetch the data, but
> it's very expensive both in terms of CPU (currently the streaming takes
> more CPU than the actual decoding, I suspect this is a sum of garbage
> collection and other factors) and network.
Just to make sure I understand. How is your use case different from 
DASH-JS [1][2] ? These implementations seem to do streaming over XHR 
without too many problems. Are you having problems because you're doing 
audio-only and thus the network processing is very visible? Is it 
because you are using small chunks (for low latency?) and you get too 
many events?

> My proposal is that we add a feature for streaming to XHRs that are of the
> arraybuffer response type.
> My first idea was that if you set a property called "chunkSize" on the XHR,
> it would start dispatching an event called "onchunk" whenever a chunk of
> that size has been loaded.
Is it size or media duration or both? The size might be roughly constant 
for audio data but not for other types say video. You might want to 
receive events only when some media duration has been received and not 
care about the size, no?
> That event would contain a property "chunk" that
> would be an array buffer containing that data. However, I'm having second
> thoughts on that approach as it is likely to produce a lot of garbage.
> Instead, my refined idea is that you'd set a "chunk" property on the XHR to
> an ArrayBuffer, and each time a chunk of the size of the "chunk" was ready,
> it would set the values of the "chunk" property accordingly and the
> "onchunk" event would be dispatched.
If you want to be able to feed decoders directly (à la DASH), you might 
want to align with the Media Source Extension API which uses

  voidappend  <http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#dom-append>(Uint8Array data);

I think you would need too some timing information about the data you're 

> Thoughts?
My 2 cents,


[1] http://dash-mse-test.appspot.com/dash-player.html
[2] http://www-itec.uni-klu.ac.at/dash/?page_id=746

> Cheers,
> Jussi
> [1] https://github.com/ofmlabs/aurora.js

Cyril Concolato
Maître de Conférences/Associate Professor
Groupe Multimedia/Multimedia Group
Telecom ParisTech
46 rue Barrault
75 013 Paris, France

More information about the whatwg mailing list