blob: c21590a6827defcc21fc808646ef8ee440066283 [file] [log] [blame]
Aaron Colwellc6841a02014-03-07 01:37:561<!DOCTYPE html>
2<html>
3 <head>
Aaron Colwellaa3c90b2014-08-04 17:58:374 <title>SourceBuffer.buffered test cases.</title>
Aaron Colwell06f8ec22014-03-07 18:09:475 <script src="/resources/testharness.js"></script>
6 <script src="/resources/testharnessreport.js"></script>
Aaron Colwellc6841a02014-03-07 01:37:567 <script src="mediasource-util.js"></script>
Aaron Colwellc6841a02014-03-07 01:37:568 </head>
9 <body>
10 <div id="log"></div>
11 <script>
12 var subType = MediaSourceUtil.getSubType(MediaSourceUtil.AUDIO_ONLY_TYPE);
13
14 var manifestFilenameA = subType + "/test-a-128k-44100Hz-1ch-manifest.json";
15 var manifestFilenameB = subType + "/test-v-128k-320x240-30fps-10kfr-manifest.json";
16
17 var expectationsA = {
Aaron Colwellcffb8af2014-05-23 22:27:1018 webm: "{ [0.000, 2.022) }",
Aaron Colwellc6841a02014-03-07 01:37:5619 mp4: "{ [0.000, 2.043) }",
20 };
21
22 var expectationsB = {
Aaron Colwellcffb8af2014-05-23 22:27:1023 webm: "{ [0.000, 2.000) }",
Aaron Colwellc6841a02014-03-07 01:37:5624 mp4: "{ [0.000, 2.000) }",
25 };
26
27 function mediaSourceDemuxedTest(callback, description)
28 {
29 mediasource_test(function(test, mediaElement, mediaSource)
30 {
31 mediaElement.pause();
32 test.failOnEvent(mediaElement, 'error');
33 test.endOnEvent(mediaElement, 'ended');
34
35 MediaSourceUtil.fetchManifestAndData(test, manifestFilenameA, function(typeA, dataA)
36 {
37 MediaSourceUtil.fetchManifestAndData(test, manifestFilenameB, function(typeB, dataB)
38 {
39 mediaSource.addSourceBuffer(typeA);
40 mediaSource.addSourceBuffer(typeB);
Aaron Colwellcffb8af2014-05-23 22:27:1041 assert_equals(mediaSource.sourceBuffers.length, 2);
Aaron Colwellc6841a02014-03-07 01:37:5642
43 callback(test, mediaElement, mediaSource, dataA, dataB);
44 });
45 });
46 }, description);
47 };
48
49 function appendData(test, mediaSource, dataA, dataB, callback)
50 {
Aaron Colwellcffb8af2014-05-23 22:27:1051 var sourceBufferA = mediaSource.sourceBuffers[0];
52 var sourceBufferB = mediaSource.sourceBuffers[1];
Aaron Colwellc6841a02014-03-07 01:37:5653
54 test.expectEvent(sourceBufferA, "update");
55 test.expectEvent(sourceBufferA, "updateend");
56 sourceBufferA.appendBuffer(dataA);
57
58 test.expectEvent(sourceBufferB, "update");
59 test.expectEvent(sourceBufferB, "updateend");
60 sourceBufferB.appendBuffer(dataB);
61
62 test.waitForExpectedEvents(function()
63 {
64 callback();
65 });
66 }
67
68 mediaSourceDemuxedTest(function(test, mediaElement, mediaSource, dataA, dataB) {
69 appendData(test, mediaSource, dataA, dataB, function()
70 {
71 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectationsA[subType], "mediaSource.activeSourceBuffers[0]");
72 assertBufferedEquals(mediaSource.activeSourceBuffers[1], expectationsB[subType], "mediaSource.activeSourceBuffers[1]");
73 assertBufferedEquals(mediaElement, expectationsB[subType], "mediaElement.buffered");
74
75 mediaSource.endOfStream();
76
77 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectationsA[subType], "mediaSource.activeSourceBuffers[0]");
78 assertBufferedEquals(mediaSource.activeSourceBuffers[1], expectationsB[subType], "mediaSource.activeSourceBuffers[1]");
79 assertBufferedEquals(mediaElement, expectationsA[subType], "mediaElement.buffered");
80
81 test.done();
82 });
83 }, "Demuxed content with different lengths");
84
85 mediasource_test(function(test, mediaElement, mediaSource)
86 {
87 mediaElement.pause();
88 test.failOnEvent(mediaElement, 'error');
89 test.endOnEvent(mediaElement, 'ended');
90
91 MediaSourceUtil.fetchManifestAndData(test, subType + "/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json", function(type, data)
92 {
93 var sourceBuffer = mediaSource.addSourceBuffer(type);
94 test.expectEvent(sourceBuffer, "update");
95 test.expectEvent(sourceBuffer, "updateend");
96 sourceBuffer.appendBuffer(data);
97
98 test.waitForExpectedEvents(function()
99 {
100 var expectationsAV = {
Aaron Colwellcffb8af2014-05-23 22:27:10101 webm: ["{ [0.000, 2.003) }", "{ [0.000, 2.022) }"],
Aaron Colwellc6841a02014-03-07 01:37:56102 mp4: ["{ [0.000, 2.000) }", "{ [0.000, 2.043) }"],
103 };
104
105 var expectedBeforeEndOfStream = expectationsAV[subType][0];
106 var expectedAfterEndOfStream = expectationsAV[subType][1];
107
108 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectedBeforeEndOfStream, "mediaSource.activeSourceBuffers[0]");
109 assertBufferedEquals(mediaElement, expectedBeforeEndOfStream, "mediaElement.buffered");
110
111 mediaSource.endOfStream();
112
113 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectedAfterEndOfStream, "mediaSource.activeSourceBuffers[0]");
114 assertBufferedEquals(mediaElement, expectedAfterEndOfStream, "mediaElement.buffered");
115
116 test.done();
117 });
118 });
119 }, "Muxed tracks with different lengths");
120
Aaron Colwellc6841a02014-03-07 01:37:56121 mediaSourceDemuxedTest(function(test, mediaElement, mediaSource, dataA, dataB) {
Aaron Colwellcffb8af2014-05-23 22:27:10122 var dataBSize = {
123 webm: 318,
124 mp4: 820,
125 };
126 appendData(test, mediaSource, dataA, dataB.subarray(0, dataBSize[subType]), function()
Aaron Colwellc6841a02014-03-07 01:37:56127 {
128 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectationsA[subType], "mediaSource.activeSourceBuffers[0]");
129 assertBufferedEquals(mediaSource.activeSourceBuffers[1], "{ }", "mediaSource.activeSourceBuffers[1]");
130 assertBufferedEquals(mediaElement, "{ }", "mediaElement.buffered");
131
132 mediaSource.endOfStream();
133
134 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectationsA[subType], "mediaSource.activeSourceBuffers[0]");
135 assertBufferedEquals(mediaSource.activeSourceBuffers[1], "{ }", "mediaSource.activeSourceBuffers[1]");
136 assertBufferedEquals(mediaElement, "{ }", "mediaElement.buffered");
137
138 test.done();
139 });
140 }, "Demuxed content with an empty buffered range on one SourceBuffer");
141
142 mediasource_test(function(test, mediaElement, mediaSource)
143 {
144 mediaElement.pause();
145 test.failOnEvent(mediaElement, 'error');
146 test.endOnEvent(mediaElement, 'ended');
147
148 MediaSourceUtil.fetchManifestAndData(test, subType + "/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json", function(type, data)
149 {
150 var sourceBuffer = mediaSource.addSourceBuffer(type);
151 test.expectEvent(sourceBuffer, "update");
152 test.expectEvent(sourceBuffer, "updateend");
153 sourceBuffer.appendBuffer(data.subarray(0, 4052));
154
155 test.waitForExpectedEvents(function()
156 {
157 assertBufferedEquals(mediaSource.activeSourceBuffers[0], "{ }", "mediaSource.activeSourceBuffers[0]");
158 assertBufferedEquals(mediaElement, "{ }", "mediaElement.buffered");
159
160 mediaSource.endOfStream();
161
162 assertBufferedEquals(mediaSource.activeSourceBuffers[0], "{ }", "mediaSource.activeSourceBuffers[0]");
163 assertBufferedEquals(mediaElement, "{ }", "mediaElement.buffered");
164
165 test.done();
166 });
167 });
168 }, "Muxed content empty buffered ranges.");
Aaron Colwellcffb8af2014-05-23 22:27:10169
Aaron Colwellc6841a02014-03-07 01:37:56170 </script>
171 </body>
172</html>