mediasource-timestamp-offset.html (5933B)
1 <!DOCTYPE html> 2 <!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). --> 3 <html> 4 <head> 5 <title>SourceBuffer.timestampOffset test cases.</title> 6 <script src="/resources/testharness.js"></script> 7 <script src="/resources/testharnessreport.js"></script> 8 <script src="mediasource-util.js"></script> 9 </head> 10 <body> 11 <div id="log"></div> 12 <script> 13 function simpleTimestampOffsetTest(value, expected, description) 14 { 15 mediasource_test(function(test, mediaElement, mediaSource) 16 { 17 var segmentInfo = MediaSourceUtil.SEGMENT_INFO; 18 var sourceBuffer = mediaSource.addSourceBuffer(segmentInfo.type); 19 20 assert_equals(sourceBuffer.timestampOffset, 0, 21 "Initial timestampOffset of a SourceBuffer is 0"); 22 23 if (expected == "TypeError") { 24 assert_throws_js(TypeError, 25 function() { sourceBuffer.timestampOffset = value; }, 26 "setting timestampOffset to " + description + " throws an exception."); 27 } else { 28 sourceBuffer.timestampOffset = value; 29 assert_equals(sourceBuffer.timestampOffset, expected); 30 } 31 32 test.done(); 33 }, "Test setting SourceBuffer.timestampOffset to " + description + "."); 34 } 35 36 simpleTimestampOffsetTest(10.5, 10.5, "a positive number"); 37 simpleTimestampOffsetTest(-10.4, -10.4, "a negative number"); 38 simpleTimestampOffsetTest(0, 0, "zero"); 39 simpleTimestampOffsetTest(Number.POSITIVE_INFINITY, "TypeError", "positive infinity"); 40 simpleTimestampOffsetTest(Number.NEGATIVE_INFINITY, "TypeError", "negative infinity"); 41 simpleTimestampOffsetTest(Number.NaN, "TypeError", "NaN"); 42 simpleTimestampOffsetTest(undefined, "TypeError", "undefined"); 43 simpleTimestampOffsetTest(null, 0, "null"); 44 simpleTimestampOffsetTest(false, 0, "false"); 45 simpleTimestampOffsetTest(true, 1, "true"); 46 simpleTimestampOffsetTest("10.5", 10.5, "a number string"); 47 simpleTimestampOffsetTest("", 0, "an empty string"); 48 49 mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData) 50 { 51 var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init); 52 var mediaSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.media[0]); 53 54 test.expectEvent(sourceBuffer, "updateend", "initSegment append ended."); 55 sourceBuffer.appendBuffer(initSegment); 56 57 test.waitForExpectedEvents(function() 58 { 59 test.expectEvent(sourceBuffer, "updateend", "mediaSegment append ended."); 60 sourceBuffer.appendBuffer(mediaSegment); 61 }); 62 63 test.waitForExpectedEvents(function() 64 { 65 mediaSource.endOfStream(); 66 67 assert_equals(mediaSource.readyState, "ended"); 68 69 mediaSource.sourceBuffers[0].timestampOffset = 2; 70 71 assert_equals(mediaSource.readyState, "open"); 72 73 test.expectEvent(mediaSource, "sourceopen", "mediaSource fired 'sourceopen' event."); 74 }); 75 76 test.waitForExpectedEvents(function() 77 { 78 test.done(); 79 }); 80 }, "Test setting timestampOffset in 'ended' state causes a transition to 'open'."); 81 82 mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData) 83 { 84 var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init); 85 var mediaSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.media[0]); 86 87 test.expectEvent(sourceBuffer, "updateend", "initSegment append ended."); 88 sourceBuffer.appendBuffer(initSegment); 89 assert_equals(mediaSource.sourceBuffers[0].timestampOffset, 0, "read initial value"); 90 91 test.waitForExpectedEvents(function() 92 { 93 test.expectEvent(sourceBuffer, "updateend", "mediaSegment append ended."); 94 sourceBuffer.appendBuffer(mediaSegment); 95 assert_equals(mediaSource.sourceBuffers[0].timestampOffset, 0, 96 "No change to timestampoffset after segments mode init segment append"); 97 }); 98 99 test.waitForExpectedEvents(function() 100 { 101 assert_equals(mediaSource.sourceBuffers[0].timestampOffset, 0, 102 "No change to timestampoffset after segments mode media segment append"); 103 test.done(); 104 }); 105 }, "Test getting the initial value of timestampOffset."); 106 107 mediasource_test(function(test, mediaElement, mediaSource) 108 { 109 var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE); 110 assert_true(sourceBuffer != null, "New SourceBuffer returned"); 111 112 mediaSource.removeSourceBuffer(sourceBuffer); 113 assert_equals(mediaSource.sourceBuffers.length, 0, "MediaSource.sourceBuffers is empty"); 114 assert_equals(mediaSource.activeSourceBuffers.length, 0, "MediaSource.activesourceBuffers is empty"); 115 116 assert_throws_dom("InvalidStateError", function() 117 { 118 sourceBuffer.timestampOffset = 10; 119 }); 120 121 test.done(); 122 }, "Test setting timestampoffset after removing the sourcebuffer."); 123 </script> 124 </body> 125 </html>