OLD | NEW |
---|---|
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <html> | 2 <html> |
3 <head> | 3 <head> |
4 <script src="/w3c/resources/testharness.js"></script> | 4 <script src="/w3c/resources/testharness.js"></script> |
5 <script src="/w3c/resources/testharnessreport.js"></script> | 5 <script src="/w3c/resources/testharnessreport.js"></script> |
6 <script src="mediasource-util.js"></script> | 6 <script src="mediasource-util.js"></script> |
7 <link rel="stylesheet" href="/w3c/resources/testharness.css"> | 7 <link rel="stylesheet" href="/w3c/resources/testharness.css"> |
8 </head> | 8 </head> |
9 <body> | 9 <body> |
10 <div id="log"></div> | 10 <div id="log"></div> |
11 <script> | 11 <script> |
12 var subType = MediaSourceUtil.getSubType(MediaSourceUtil.AUDIO_ONLY_ TYPE); | 12 var subType = MediaSourceUtil.getSubType(MediaSourceUtil.AUDIO_ONLY_ TYPE); |
13 | 13 |
14 var manifestFilenameA = subType + "/test-a-128k-44100Hz-1ch-manifest .json"; | 14 var manifestFilenameA = subType + '/test-a-128k-44100Hz-1ch-manifest .json'; |
15 var manifestFilenameB = subType + "/test-v-128k-320x240-30fps-10kfr- manifest.json"; | 15 var manifestFilenameB = subType + '/test-v-128k-320x240-30fps-10kfr- manifest.json'; |
16 | 16 |
17 var expectationsA = { | 17 var expectationsA = { |
18 webm: "{ [0.000, 2.022) }", | 18 webm: '{ [0.000, 2.022) }', |
19 mp4: "{ [0.000, 2.043) }", | 19 mp4: '{ [0.000, 2.043) }', |
20 }; | 20 }; |
21 | 21 |
22 var expectationsB = { | 22 var expectationsB = { |
23 webm: "{ [0.000, 2.000) }", | 23 webm: '{ [0.000, 2.000) }', |
24 mp4: "{ [0.000, 2.000) }", | 24 mp4: '{ [0.000, 2.000) }', |
25 }; | 25 }; |
26 | 26 |
27 function mediaSourceDemuxedTest(callback, description) | 27 function mediaSourceDemuxedTest(callback, description) |
28 { | 28 { |
29 mediasource_test(function(test, mediaElement, mediaSource) | 29 mediasource_test(function(test, mediaElement, mediaSource) |
30 { | 30 { |
31 mediaElement.pause(); | 31 mediaElement.pause(); |
32 test.failOnEvent(mediaElement, 'error'); | 32 test.failOnEvent(mediaElement, 'error'); |
33 test.endOnEvent(mediaElement, 'ended'); | 33 test.endOnEvent(mediaElement, 'ended'); |
34 | 34 |
35 MediaSourceUtil.fetchManifestAndData(test, manifestFilenameA , function(typeA, dataA) | 35 MediaSourceUtil.fetchManifestAndData(test, manifestFilenameA , function(typeA, dataA) |
36 { | 36 { |
37 MediaSourceUtil.fetchManifestAndData(test, manifestFilen ameB, function(typeB, dataB) | 37 MediaSourceUtil.fetchManifestAndData(test, manifestFilen ameB, function(typeB, dataB) |
38 { | 38 { |
39 mediaSource.addSourceBuffer(typeA); | 39 mediaSource.addSourceBuffer(typeA); |
40 mediaSource.addSourceBuffer(typeB); | 40 mediaSource.addSourceBuffer(typeB); |
41 assert_equals(mediaSource.activeSourceBuffers.length , 2); | 41 assert_equals(mediaSource.activeSourceBuffers.length , 2); |
42 | 42 |
43 callback(test, mediaElement, mediaSource, dataA, dat aB); | 43 callback(test, mediaElement, mediaSource, dataA, dat aB); |
44 }); | 44 }); |
45 }); | 45 }); |
46 }, description); | 46 }, description); |
47 }; | 47 }; |
48 | 48 |
49 function appendData(test, mediaSource, dataA, dataB, callback) | 49 function appendData(test, mediaSource, dataA, dataB, callback) |
50 { | 50 { |
51 var sourceBufferA = mediaSource.activeSourceBuffers[0]; | 51 var sourceBufferA = mediaSource.activeSourceBuffers[0]; |
52 var sourceBufferB = mediaSource.activeSourceBuffers[1]; | 52 var sourceBufferB = mediaSource.activeSourceBuffers[1]; |
53 | 53 |
54 test.expectEvent(sourceBufferA, "update"); | 54 test.expectEvent(sourceBufferA, 'update'); |
55 test.expectEvent(sourceBufferA, "updateend"); | 55 test.expectEvent(sourceBufferA, 'updateend'); |
56 sourceBufferA.appendBuffer(dataA); | 56 sourceBufferA.appendBuffer(dataA); |
57 | 57 |
58 test.expectEvent(sourceBufferB, "update"); | 58 test.expectEvent(sourceBufferB, 'update'); |
59 test.expectEvent(sourceBufferB, "updateend"); | 59 test.expectEvent(sourceBufferB, 'updateend'); |
60 sourceBufferB.appendBuffer(dataB); | 60 sourceBufferB.appendBuffer(dataB); |
61 | 61 |
62 test.waitForExpectedEvents(function() | 62 test.waitForExpectedEvents(function() |
63 { | 63 { |
64 callback(); | 64 callback(); |
65 }); | 65 }); |
66 } | 66 } |
67 | 67 |
68 mediaSourceDemuxedTest(function(test, mediaElement, mediaSource, dat aA, dataB) { | 68 mediaSourceDemuxedTest(function(test, mediaElement, mediaSource, dat aA, dataB) { |
69 appendData(test, mediaSource, dataA, dataB, function() | 69 appendData(test, mediaSource, dataA, dataB, function() |
70 { | 70 { |
71 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], "mediaSource.activeSourceBuffers[0]"); | 71 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], 'mediaSource.activeSourceBuffers[0]'); |
72 assertBufferedEquals(mediaSource.activeSourceBuffers[1], exp ectationsB[subType], "mediaSource.activeSourceBuffers[1]"); | 72 assertBufferedEquals(mediaSource.activeSourceBuffers[1], exp ectationsB[subType], 'mediaSource.activeSourceBuffers[1]'); |
73 assertBufferedEquals(mediaElement, expectationsB[subType], " mediaElement.buffered"); | 73 assertBufferedEquals(mediaElement, expectationsB[subType], ' mediaElement.buffered'); |
74 | 74 |
75 mediaSource.endOfStream(); | 75 mediaSource.endOfStream(); |
76 | 76 |
77 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], "mediaSource.activeSourceBuffers[0]"); | 77 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], 'mediaSource.activeSourceBuffers[0]'); |
78 assertBufferedEquals(mediaSource.activeSourceBuffers[1], exp ectationsB[subType], "mediaSource.activeSourceBuffers[1]"); | 78 assertBufferedEquals(mediaSource.activeSourceBuffers[1], exp ectationsB[subType], 'mediaSource.activeSourceBuffers[1]'); |
79 assertBufferedEquals(mediaElement, expectationsA[subType], " mediaElement.buffered"); | 79 assertBufferedEquals(mediaElement, expectationsA[subType], ' mediaElement.buffered'); |
80 | 80 |
81 test.done(); | 81 test.done(); |
82 }); | 82 }); |
83 }, "Demuxed content with different lengths"); | 83 }, 'Demuxed content with different lengths'); |
84 | 84 |
85 mediasource_test(function(test, mediaElement, mediaSource) | 85 mediasource_test(function(test, mediaElement, mediaSource) |
86 { | 86 { |
87 mediaElement.pause(); | 87 mediaElement.pause(); |
88 test.failOnEvent(mediaElement, 'error'); | 88 test.failOnEvent(mediaElement, 'error'); |
89 test.endOnEvent(mediaElement, 'ended'); | 89 test.endOnEvent(mediaElement, 'ended'); |
90 | 90 |
91 MediaSourceUtil.fetchManifestAndData(test, subType + "/test-av-3 84k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json", function(type, data) | 91 MediaSourceUtil.fetchManifestAndData(test, subType + '/test-av-3 84k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json', function(type, data) |
92 { | 92 { |
93 var sourceBuffer = mediaSource.addSourceBuffer(type); | 93 var sourceBuffer = mediaSource.addSourceBuffer(type); |
94 test.expectEvent(sourceBuffer, "update"); | 94 test.expectEvent(sourceBuffer, 'update'); |
95 test.expectEvent(sourceBuffer, "updateend"); | 95 test.expectEvent(sourceBuffer, 'updateend'); |
96 sourceBuffer.appendBuffer(data); | 96 sourceBuffer.appendBuffer(data); |
97 | 97 |
98 test.waitForExpectedEvents(function() | 98 test.waitForExpectedEvents(function() |
99 { | 99 { |
100 var expectationsAV = { | 100 var expectationsAV = { |
101 webm: ["{ [0.000, 2.003) }", "{ [0.000, 2.022) }"], | 101 webm: ['{ [0.000, 2.003) }', '{ [0.000, 2.022) }'], |
102 mp4: ["{ [0.000, 2.000) }", "{ [0.000, 2.043) }"], | 102 mp4: ['{ [0.000, 2.000) }', '{ [0.000, 2.043) }'], |
103 }; | 103 }; |
104 | 104 |
105 var expectedBeforeEndOfStream = expectationsAV[subType][ 0]; | 105 var expectedBeforeEndOfStream = expectationsAV[subType][ 0]; |
106 var expectedAfterEndOfStream = expectationsAV[subType][1 ]; | 106 var expectedAfterEndOfStream = expectationsAV[subType][1 ]; |
107 | 107 |
108 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectedBeforeEndOfStream, "mediaSource.activeSourceBuffers[0]"); | 108 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectedBeforeEndOfStream, 'mediaSource.activeSourceBuffers[0]'); |
109 assertBufferedEquals(mediaElement, expectedBeforeEndOfSt ream, "mediaElement.buffered"); | 109 assertBufferedEquals(mediaElement, expectedBeforeEndOfSt ream, 'mediaElement.buffered'); |
110 | 110 |
111 mediaSource.endOfStream(); | 111 mediaSource.endOfStream(); |
112 | 112 |
113 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectedAfterEndOfStream, "mediaSource.activeSourceBuffers[0]"); | 113 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectedAfterEndOfStream, 'mediaSource.activeSourceBuffers[0]'); |
114 assertBufferedEquals(mediaElement, expectedAfterEndOfStr eam, "mediaElement.buffered"); | 114 assertBufferedEquals(mediaElement, expectedAfterEndOfStr eam, 'mediaElement.buffered'); |
115 | 115 |
116 test.done(); | 116 test.done(); |
117 }); | 117 }); |
118 }); | 118 }); |
119 }, "Muxed tracks with different lengths"); | 119 }, 'Muxed tracks with different lengths'); |
120 | 120 |
121 | 121 |
122 mediaSourceDemuxedTest(function(test, mediaElement, mediaSource, dat aA, dataB) { | 122 mediaSourceDemuxedTest(function(test, mediaElement, mediaSource, dat aA, dataB) { |
123 appendData(test, mediaSource, dataA, dataB.subarray(0, 318), fun ction() | 123 appendData(test, mediaSource, dataA, dataB.subarray(0, 318), fun ction() |
124 { | 124 { |
125 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], "mediaSource.activeSourceBuffers[0]"); | 125 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], 'mediaSource.activeSourceBuffers[0]'); |
126 assertBufferedEquals(mediaSource.activeSourceBuffers[1], "{ }", "mediaSource.activeSourceBuffers[1]"); | 126 assertBufferedEquals(mediaSource.activeSourceBuffers[1], '{ }', 'mediaSource.activeSourceBuffers[1]'); |
127 assertBufferedEquals(mediaElement, "{ }", "mediaElement.buff ered"); | 127 assertBufferedEquals(mediaElement, '{ }', 'mediaElement.buff ered'); |
128 | 128 |
129 mediaSource.endOfStream(); | 129 mediaSource.endOfStream(); |
130 | 130 |
131 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], "mediaSource.activeSourceBuffers[0]"); | 131 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], 'mediaSource.activeSourceBuffers[0]'); |
132 assertBufferedEquals(mediaSource.activeSourceBuffers[1], "{ }", "mediaSource.activeSourceBuffers[1]"); | 132 assertBufferedEquals(mediaSource.activeSourceBuffers[1], '{ }', 'mediaSource.activeSourceBuffers[1]'); |
133 assertBufferedEquals(mediaElement, "{ }", "mediaElement.buff ered"); | 133 assertBufferedEquals(mediaElement, '{ }', 'mediaElement.buff ered'); |
134 | 134 |
135 test.done(); | 135 test.done(); |
136 }); | 136 }); |
137 }, "Demuxed content with an empty buffered range on one SourceBuffer "); | 137 }, 'Demuxed content with an empty buffered range on one SourceBuffer '); |
138 | 138 |
139 mediasource_test(function(test, mediaElement, mediaSource) | 139 mediasource_test(function(test, mediaElement, mediaSource) |
140 { | 140 { |
141 mediaElement.pause(); | 141 mediaElement.pause(); |
142 test.failOnEvent(mediaElement, 'error'); | 142 test.failOnEvent(mediaElement, 'error'); |
143 test.endOnEvent(mediaElement, 'ended'); | 143 test.endOnEvent(mediaElement, 'ended'); |
144 | 144 |
145 MediaSourceUtil.fetchManifestAndData(test, subType + "/test-av-3 84k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json", function(type, data) | 145 MediaSourceUtil.fetchManifestAndData(test, subType + '/test-av-3 84k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json', function(type, data) |
146 { | 146 { |
147 var sourceBuffer = mediaSource.addSourceBuffer(type); | 147 var sourceBuffer = mediaSource.addSourceBuffer(type); |
148 test.expectEvent(sourceBuffer, "update"); | 148 test.expectEvent(sourceBuffer, 'update'); |
149 test.expectEvent(sourceBuffer, "updateend"); | 149 test.expectEvent(sourceBuffer, 'updateend'); |
150 sourceBuffer.appendBuffer(data.subarray(0, 4052)); | 150 sourceBuffer.appendBuffer(data.subarray(0, 4052)); |
151 | 151 |
152 test.waitForExpectedEvents(function() | 152 test.waitForExpectedEvents(function() |
153 { | 153 { |
154 assertBufferedEquals(mediaSource.activeSourceBuffers[0], "{ }", "mediaSource.activeSourceBuffers[0]"); | 154 assertBufferedEquals(mediaSource.activeSourceBuffers[0], '{ }', 'mediaSource.activeSourceBuffers[0]'); |
155 assertBufferedEquals(mediaElement, "{ }", "mediaElement. buffered"); | 155 assertBufferedEquals(mediaElement, '{ }', 'mediaElement. buffered'); |
156 | 156 |
157 mediaSource.endOfStream(); | 157 mediaSource.endOfStream(); |
158 | 158 |
159 assertBufferedEquals(mediaSource.activeSourceBuffers[0], "{ }", "mediaSource.activeSourceBuffers[0]"); | 159 assertBufferedEquals(mediaSource.activeSourceBuffers[0], '{ }', 'mediaSource.activeSourceBuffers[0]'); |
160 assertBufferedEquals(mediaElement, "{ }", "mediaElement. buffered"); | 160 assertBufferedEquals(mediaElement, '{ }', 'mediaElement. buffered'); |
161 | 161 |
162 test.done(); | 162 test.done(); |
163 }); | 163 }); |
164 }); | 164 }); |
165 }, "Muxed content empty buffered ranges."); | 165 }, 'Muxed content empty buffered ranges.'); |
166 | 166 |
167 mediasource_test(function(test, mediaElement, mediaSource) | 167 mediasource_test(function(test, mediaElement, mediaSource) |
168 { | 168 { |
169 mediaElement.pause(); | 169 mediaElement.pause(); |
170 test.failOnEvent(mediaElement, 'error'); | 170 test.failOnEvent(mediaElement, 'error'); |
171 test.endOnEvent(mediaElement, 'ended'); | 171 test.endOnEvent(mediaElement, 'ended'); |
172 | 172 |
173 var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.A UDIO_ONLY_TYPE); | 173 var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.A UDIO_ONLY_TYPE); |
174 | 174 |
175 // FIXME: verify activeSourceBuffers is empty until init segment with at least | 175 // FIXME: verify activeSourceBuffers is empty until init segment with at least |
176 // one active track is appended. | 176 // one active track is appended. |
177 assertBufferedEquals(mediaSource.sourceBuffers[0], "{ }", "media Source.sourceBuffers[0]"); | 177 assertBufferedEquals(mediaSource.sourceBuffers[0], '{ }', 'media Source.sourceBuffers[0]'); |
178 assertBufferedEquals(mediaElement, "{ }", "mediaElement.buffered "); | 178 assertBufferedEquals(mediaElement, '{ }', 'mediaElement.buffered '); |
179 test.done(); | 179 test.done(); |
180 | 180 |
181 }, "Get buffered range when sourcebuffer is empty."); | 181 }, 'Get buffered range when sourcebuffer is empty.'); |
182 | 182 |
183 mediasource_testafterdataloaded(function(test, mediaElement, mediaSo urce, segmentInfo, sourceBuffer, mediaData) | 183 mediasource_testafterdataloaded(function(test, mediaElement, mediaSo urce, segmentInfo, sourceBuffer, mediaData) |
184 { | 184 { |
185 var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init); | 185 var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init); |
186 | 186 |
187 test.expectEvent(sourceBuffer, "updateend", "initSegment append ended."); | 187 test.expectEvent(sourceBuffer, 'updateend', 'initSegment append ended.'); |
188 sourceBuffer.appendBuffer(initSegment); | 188 sourceBuffer.appendBuffer(initSegment); |
189 test.waitForExpectedEvents(function() | 189 test.waitForExpectedEvents(function() |
190 { | 190 { |
191 assertBufferedEquals(mediaSource.sourceBuffers[0], "{ }", "m ediaSource.sourceBuffers[0]"); | 191 assertBufferedEquals(mediaSource.sourceBuffers[0], '{ }', 'm ediaSource.sourceBuffers[0]'); |
192 assertBufferedEquals(mediaSource.activeSourceBuffers[0], "{ }", "mediaSource.activeSourceBuffers[0]"); | 192 assertBufferedEquals(mediaSource.activeSourceBuffers[0], '{ }', 'mediaSource.activeSourceBuffers[0]'); |
193 assertBufferedEquals(mediaElement, "{ }", "mediaElement.buff ered"); | 193 assertBufferedEquals(mediaElement, '{ }', 'mediaElement.buff ered'); |
194 test.done(); | 194 test.done(); |
195 }); | 195 }); |
196 | 196 |
197 }, "Get buffered range when only initsegment is appended."); | 197 }, 'Get buffered range when only initsegment is appended.'); |
198 | |
wolenetz
2014/07/29 22:33:22
nit: remove extra horizontal whitespace on this li
prabhur1
2014/07/30 19:56:22
Done.
| |
199 mediasource_testafterdataloaded(function(test, mediaElement, mediaSo urce, segmentInfo, sourceBuffer, mediaData) | |
200 { | |
201 test.expectEvent(mediaSource.sourceBuffers, 'removesourcebuffer' , 'SourceBuffer removed.'); | |
202 mediaSource.removeSourceBuffer(sourceBuffer); | |
203 | |
204 test.waitForExpectedEvents(function() | |
205 { | |
206 assert_throws('InvalidStateError', | |
207 function() { sourceBuffer.buffered; }, | |
208 'get sourceBuffer.buffered throws an exception for Inval idStateError.'); | |
209 test.done(); | |
210 }); | |
211 }, 'Get buffered range after removing sourcebuffer.'); | |
198 </script> | 212 </script> |
199 </body> | 213 </body> |
200 </html> | 214 </html> |
OLD | NEW |