- From: guest271314 <notifications@github.com>
- Date: Tue, 04 Jul 2017 23:36:56 -0700
- To: whatwg/fetch <fetch@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/fetch/issues/554/313013739@github.com>
@beaufortfrancois Tried to set `<video>` element `.src` to `Blob URL` with `.slice()` of `Uint8Array()` with `ArrayBuffer` as source from `.arrayBuffer()` to smallest value which dispatched `canplay` event of `<video>` element, using https://nickdesaulniers.github.io/netfix/demo/frag_bunny.mp4 as media resource. The smallest value passed to `.slice()` which rendered the non-playing beginning of the media was `33700`. The video time is set to 2 seconds, though pressing play control does not play a time slice of the media ``` fetch("https://nickdesaulniers.github.io/netfix/demo/frag_bunny.mp4") .then(response => response.arrayBuffer()) .then(ab => { const VIEW = new Uint8Array(ab); video.src = URL.createObjectURL(new Blob([VIEW.slice(0, 33700)])); }) ``` but rather flashes the `<video>` element. A `.slice()` of `36500` was the least value which actually moved the current time control. A `.slice()` of `144000` was least to playback the full initial 2 seconds of media. A `.slice()` of `1908` dispatches `loadedmetadata` event. Was not able to produce media playback with a `.slice()` of `1024`, which does not appear to load enough media data for `loadedmetadata` event to be dispatched or media playback. If the requirement is to play media from cache while the request is being processed you can use `ReadableStream` and `MediaSource` with `SourceBuffer` `.mode` set to `"segments"` to append a chunk of data as `Uint8Array` to `SourceBuffer` during the read of the response, before the full request has completed ``` const [video, mediaSource, mimeCodec, processStream] = [ document.querySelector("video") , new MediaSource , "video/mp4; codecs=avc1.42E01E, mp4a.40.2" , ({value, done}) => { if (done) { mediaSource.endOfStream(); return } sourceBuffer.appendBuffer(value); } ]; video.oncanplay = () => { video.oncanplay = null; video.play() } // if required respond from cache at ServiceWorker here fetch("https://nickdesaulniers.github.io/netfix/demo/frag_bunny.mp4") .then(response => response.body.getReader()) .then(reader => { video.src = URL.createObjectURL(mediaSource); mediaSource.onsourceopen = () => { sourceBuffer = mediaSource.addSourceBuffer(mimeCodec); sourceBuffer.mode = "segments"; sourceBuffer.addEventListener("updateend", event => { reader.read().then(processStream) }); reader.read().then(processStream); } return Promise.all([new Promise(resolve => mediaSource.onsourceended = () => resolve(mediaSource.readyState)), reader.closed]) }) .then(([msReadyState]) => { console.log(msReadyState) }) .catch(err => console.log(err)) ``` [plnkr](https://plnkr.co/edit/qULJYv1laeHioOCAizu3?p=preview) -- 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/fetch/issues/554#issuecomment-313013739
Received on Wednesday, 5 July 2017 06:37:28 UTC