mediasource-seekable.html (3780B)
1 <!DOCTYPE html> 2 <!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). --> 3 <meta charset="utf-8"> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="mediasource-util.js"></script> 7 <script> 8 mediasource_test(function(test, mediaElement, mediaSource) 9 { 10 mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'")); 11 mediaElement.addEventListener('ended', test.step_func_done(function () {})); 12 13 var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE); 14 15 assertSeekableEquals(mediaElement, '{ }', 'mediaElement.seekable'); 16 test.done(); 17 }, 'Get seekable time ranges when the sourcebuffer is empty.'); 18 19 mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData) 20 { 21 var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init); 22 test.expectEvent(mediaElement, 'durationchange', 'mediaElement got duration'); 23 sourceBuffer.appendBuffer(initSegment); 24 test.waitForExpectedEvents(function() 25 { 26 assert_equals(mediaElement.duration, segmentInfo.duration); 27 assertSeekableEquals(mediaElement, '{ [0.000, ' + segmentInfo.duration.toFixed(3) + ') }', 'mediaElement.seekable'); 28 test.done(); 29 }); 30 }, 'Get seekable time ranges after init segment received.'); 31 32 mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData) 33 { 34 var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init); 35 test.expectEvent(mediaElement, 'durationchange', 'mediaElement got duration after initsegment'); 36 test.expectEvent(sourceBuffer, 'update'); 37 test.expectEvent(sourceBuffer, 'updateend'); 38 sourceBuffer.appendBuffer(initSegment); 39 test.waitForExpectedEvents(function() 40 { 41 assert_false(sourceBuffer.updating, "updating attribute is false"); 42 test.expectEvent(mediaElement, 'durationchange', 'mediaElement got infinity duration'); 43 mediaSource.duration = Infinity; 44 test.waitForExpectedEvents(function() 45 { 46 assertSeekableEquals(mediaElement, '{ }', 'mediaElement.seekable'); 47 48 // Append a segment from the middle of the stream to make sure that seekable does not use buffered.start(0) or duration as first or last value 49 var midSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.media[2]); 50 test.expectEvent(sourceBuffer, 'update'); 51 test.expectEvent(sourceBuffer, 'updateend'); 52 sourceBuffer.appendBuffer(midSegment); 53 test.waitForExpectedEvents(function() 54 { 55 assert_equals(mediaElement.seekable.length, 1, 'mediaElement.seekable.length'); 56 assert_equals(mediaElement.buffered.length, 1, 'mediaElement.buffered.length'); 57 assert_not_equals(mediaElement.seekable.start(0), mediaElement.buffered.start(0)); 58 assert_equals(mediaElement.seekable.start(0), 0); 59 assert_not_equals(mediaElement.seekable.end(0), mediaElement.duration); 60 assert_not_equals(mediaElement.seekable.end(0), mediaElement.buffered.start(0)); 61 assert_equals(mediaElement.seekable.end(0), mediaElement.buffered.end(0)); 62 test.done(); 63 }); 64 }); 65 }); 66 }, 'Get seekable time ranges on an infinite stream.'); 67 </script>