test_LoadedDataFired_mp4.html (2164B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>MSE: Check that playback only starts once we have data at time = 0</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <script type="text/javascript" src="mediasource.js"></script> 7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 8 </head> 9 <body> 10 <pre id="test"> 11 <script class="testbody" type="text/javascript"> 12 13 SimpleTest.waitForExplicitFinish(); 14 15 runWithMSE(async (ms, el) => { 16 el.controls = true; 17 el.addEventListener("loadeddata", () => { 18 ok(el.buffered.length, "data is buffered"); 19 is(el.buffered.start(0), 0, "must fire loadeddata when data has been loaded"); 20 is(el.currentTime, 0, "must fire loadeddata at start"); 21 }); 22 el.addEventListener("playing", () => { 23 ok(el.buffered.length, "data is buffered"); 24 is(el.buffered.start(0), 0, "must fire playing when data has been loaded"); 25 ok(el.currentTime >= 0, "must have started playback"); 26 }); 27 await once(ms, "sourceopen"); 28 ok(true, "Receive a sourceopen event"); 29 const videosb = ms.addSourceBuffer("video/mp4"); 30 is(el.readyState, el.HAVE_NOTHING, "readyState is HAVE_NOTHING"); 31 let p = once(el, "loadedmetadata"); 32 await fetchAndLoad(videosb, "bipbop/bipbop_video", ["init"], ".mp4"); 33 await p; 34 videosb.appendWindowStart = 2; 35 videosb.appendWindowEnd = 4; 36 is(el.readyState, el.HAVE_METADATA, "readyState is HAVE_METADATA"); 37 // Load [2.4, 3.968344). 2.4 as it's the first keyframe after 2s and 38 // 3.968344 as the last frame ends after 4s. 39 await fetchAndLoad(videosb, "bipbop/bipbop_video", range(1, 8), ".m4s"); 40 is(el.readyState, el.HAVE_METADATA, "readyState is HAVE_METADATA"); 41 // test that appendWindowEnd did its job. 42 ok(el.buffered.start(0) >= 2, "no data can be found prior appendWindowStart"); 43 ok(el.buffered.end(el.buffered.length - 1) <= 4, "no data can be found beyond appendWindowEnd"); 44 el.play(); 45 await once(el, "play"); 46 videosb.appendWindowStart = 0; 47 p = once(el, "playing"); 48 await fetchAndLoad(videosb, "bipbop/bipbop_video", range(1, 8), ".m4s"); 49 await p; 50 ok(true, "playing"); 51 SimpleTest.finish(); 52 }); 53 54 </script> 55 </pre> 56 </body> 57 </html>