test_LiveSeekable.html (3202B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>MSE: live seekable range</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, v) => { 16 await once(ms, "sourceopen"); 17 const sb = ms.addSourceBuffer("video/webm"); 18 19 // Load data with a +2 offset so that we can distinguish buffered range start 20 // and seekable range start. 21 sb.timestampOffset = 2; 22 const p = once(v, "loadedmetadata"); 23 await fetchAndLoad(sb, "seek", [""], ".webm"); 24 await p; 25 ms.duration = Infinity; 26 sb.abort(); 27 is(sb.buffered.length, 1, "continuous buffered range"); 28 is(sb.buffered.start(0), 2, "buffered range start at timestamp offset"); 29 is(sb.buffered.end(0), 6.001, "buffered range end at original duration + timestamp offset"); 30 is(v.seekable.length, 1, "continuous seekable range"); 31 is(v.seekable.start(0), 0, "seekable range start at 0"); 32 is(v.seekable.end(0), sb.buffered.end(0), "seekable range end at buffered end"); 33 34 // LiveSeekableRange.start < buffered.start 35 ms.setLiveSeekableRange(1, 5); 36 is(v.seekable.length, 1, "continuous seekable range"); 37 is(v.seekable.start(0), 1, "seekable range start at live range start"); 38 is(v.seekable.end(0), sb.buffered.end(0), "seekable range end at buffered end"); 39 40 ms.clearLiveSeekableRange(); 41 is(v.seekable.length, 1, "continuous seekable range"); 42 is(v.seekable.start(0), 0, "seekable range start at 0"); 43 is(v.seekable.end(0), sb.buffered.end(0), "seekable range end at buffered end"); 44 45 // LiveSeekableRange.end > buffered.end 46 ms.setLiveSeekableRange(1, 8); 47 is(v.seekable.start(0), 1, "seekable range start at live range start"); 48 is(v.seekable.end(0), 8, "seekable range end at live range end"); 49 50 // LiveSeekableRange.start > buffered.start 51 // LiveSeekableRange.end < buffered.end 52 ms.setLiveSeekableRange(3, 5); 53 is(v.seekable.start(0), sb.buffered.start(0), "seekable range start at buffered start"); 54 is(v.seekable.end(0), sb.buffered.end(0), "seekable range end at live range end"); 55 56 // LiveSeekableRange.start > buffered.end 57 ms.setLiveSeekableRange(8, 10); 58 is(v.seekable.start(0), sb.buffered.start(0), "seekable range start at buffered start"); 59 is(v.seekable.end(0), 10, "seekable range end at live range end"); 60 61 // LiveSeekableRange.end < buffered.start 62 ms.setLiveSeekableRange(0, 2); 63 is(v.seekable.start(0), 0, "seekable range start at live range start"); 64 is(v.seekable.end(0), sb.buffered.end(0), "seekable range end at buffered end"); 65 66 must_throw(() => ms.setLiveSeekableRange(2, 0), 67 "must thow if start > end", 68 "TypeError"); 69 70 must_throw(() => ms.setLiveSeekableRange(2, 0), 71 "must thow if start > end", 72 "TypeError"); 73 74 ms.setLiveSeekableRange(0, 1e300); 75 is(v.seekable.start(0), 0, "seekable range start at live range start"); 76 is(v.seekable.end(0), 1e300, "seekable range end at specified time"); 77 78 SimpleTest.finish(); 79 }); 80 81 </script> 82 </pre> 83 </body> 84 </html>