- From: Cyril Concolato <cyril.concolato@telecom-paristech.fr>
- Date: Fri, 18 Jan 2013 13:59:11 +0100
- To: Jonas Sicking <jonas@sicking.cc>
- CC: public-webapps@w3.org
- Message-ID: <50F9471F.6060205@telecom-paristech.fr>
Hi Jonas, Le 1/18/2013 11:14 AM, Jonas Sicking a écrit : > On Thu, Jan 17, 2013 at 1:56 AM, Cyril Concolato > <cyril.concolato@telecom-paristech.fr> wrote: >> Hi all, >> >> Reading the File API, it is not clear to me what the behavior is when >> reading partial Blob data. The spec says: >> " Partial Blob data is the part of the File or Blob that has been read into >> memory currently; >> when processing the read method readAsText, partial Blob data is a DOMString >> that is incremented as more bytes are loaded (a portion of the total) >> [ProgressEvents], >> and when processing readAsArrayBuffer partial Blob data is an ArrayBuffer >> [TypedArrays] object consisting of the bytes loaded so far (a portion of the >> total)[ProgressEvents]. " >> >> Does this mean that the result object is the same or it is a new object each >> time there is a progress event ? In the case of a DOMString, it could be the >> same object incremented but if it is an ArrayBuffer, since it is immutable, >> it cannot be incremented. > Strings in JS are immutable. So it will always be a new string. > >> So in the case the final length of the Blob is not >> known yet (e.g. chunked XHR), result has to be a new object each time. Am I >> wrong here? If not, could you clarify the spec ? > The size of a Blob is always known. The .size property never returns > 'undefined' or 'null' or anything like that. XHR never returns a Blob > object until it knows what size of Blob object to create. Thanks for the clarification. So if I understand correctly, the result attribute of a FileReader object at each progress event is a different object. Is that right? I also have a few more questions about the use of XHR and FileReader. The use case I'm working on is the HTTP Streaming of a live binary data (typically video and audio but not only) using chunked XHR. 1) I'm wondering why in progressive mode, does the spec say: |"|partial Blob data is an |ArrayBuffer|[TypedArrays <http://dev.w3.org/2006/webapi/FileAPI/#TypedArrays>] object consisting of the bytes|loaded|so far". Why isn't it the bytes loaded since the previous progress event? In my use case, the binary data resource might have an infinite size, in which case the result objects will grow forever. I looked at the Streams API [1] to see if there was any difference for that but I couldn't see any. Reading with the FileReader interface a Stream (dynamic length) or a Blob (fixed length) seems to always return the whole content. I also looked at the WHATWG XHR spec [2] and its use of responseType "stream" and in this case, it seems that the response attribute is a Stream object containing "the fragment of theentity body <http://tools.ietf.org/html/rfc2616/#section-7.2>of the response received so far". So this is not useful either. 2) I'm wondering also why wasn't the design made to enable accessing the content of each HTTP chunk directly within the XHR object. In a video streaming use case, the server might have carefully created the (video) chunks so that an application can use them independently without parsing them (typically passing them to the decoder through the MediaSource Extension API [3]). With the FileReader approach, the application will have to parse each progress event result object to determine meaningful chunks for the video decoder. Regards, Cyril [1] https://dvcs.w3.org/hg/streams-api/raw-file/tip/Overview.htm#streamreader-interface [2] http://xhr.spec.whatwg.org/#the-responsetype-attribute [3] https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html -- Cyril Concolato Maître de Conférences/Associate Professor Groupe Multimedia/Multimedia Group Telecom ParisTech 46 rue Barrault 75 013 Paris, France http://concolato.wp.mines-telecom.fr/
Received on Friday, 18 January 2013 12:59:45 UTC