<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"/> <title>MediaSource Test</title> <meta name="description" content="" /> <script> var ms, sourceBuffer, video, baseUrl = "http://dash.edgesuite.net/dash264/TestCases/2a/thomson-networks/", mimetype, codec, loaded = 0, initialization, frags, playbackStarted = false; function loadVideo() { mimetype = "video/mp4"; codec = "avc1.4d401e"; initialization = baseUrl + "video_900000bps.mp4"; frags = []; frags.push(baseUrl + "video_1_900000bps.mp4"); frags.push(baseUrl + "video_2_900000bps.mp4"); frags.push(baseUrl + "video_3_900000bps.mp4"); frags.push(baseUrl + "video_4_900000bps.mp4"); frags.push(baseUrl + "video_5_900000bps.mp4"); load(); } function loadAudio() { mimetype = "audio/mp4"; codec = "mp4a.40.5"; initialization = baseUrl + "audio_56000bps_Input_3.mp4"; frags = []; frags.push(baseUrl + "audio_1_56000bps_Input_3.mp4"); frags.push(baseUrl + "audio_2_56000bps_Input_3.mp4"); frags.push(baseUrl + "audio_3_56000bps_Input_3.mp4"); frags.push(baseUrl + "audio_4_56000bps_Input_3.mp4"); frags.push(baseUrl + "audio_5_56000bps_Input_3.mp4"); load(); } function load() { console.log("FRAGMENTS:"); console.log(frags); console.log("START"); window.MediaSource = window.MediaSource || window.WebKitMediaSource; ms = new MediaSource(); video = document.querySelector('video'); video.src = window.URL.createObjectURL(ms); ms.addEventListener('webkitsourceopen', opened, false); ms.addEventListener('webkitsourceclose', closed, false); } function opened() { var value = mimetype + ';codecs="' + codec + '"', url = initialization; console.log("OPENED"); console.log(value); sourceBuffer = ms.addSourceBuffer(value); console.log("LOAD INIT"); var req = new XMLHttpRequest(); req.responseType = "arraybuffer"; req.open("GET", url, true); req.onload = function () { console.log("INIT DONE LOADING"); sourceBuffer.append(new Uint8Array(req.response)); loadNext(); } req.onerror = function () { alert("Could not load init."); } req.send(); } function loadNext() { if (loaded >= frags.length) { console.log("EVERYTHING IS LOADED!"); return; } var url = frags[loaded], i, len, ranges = sourceBuffer.buffered; console.log("--STATUS-------"); console.log("CURRENT TIME: " + video.currentTime); console.log("BUFFERED RANGES: " + ranges.length); for (i = 0, len = ranges.length; i < len; i += 1) { console.log("RANGE: " + ranges.start(i) + " - " + ranges.end(i)); } console.log("---------------"); console.log("LOAD FRAGMENT: " + url); var req = new XMLHttpRequest(); req.responseType = "arraybuffer"; req.open("GET", url, true); req.onload = function () { console.log("FRAGMENT DONE LOADING"); sourceBuffer.append(new Uint8Array(req.response)); /* if (!playbackStarted) { playbackStarted = true; video.play(); video.currentTime = sourceBuffer.buffered.start(0); } */ loaded += 1; loadNext(); } req.onerror = function () { alert("Could not load fragment."); } req.send(); } function closed() { alert("MediaSource Closed."); } </script> </head> <body> <button type="button" onclick="loadVideo()">Load Video</button> <button type="button" onclick="loadAudio()">Load Audio</button> <video controls autoplay width="320" height="240"></video> </body> </html>