Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <html> | 2 <html> |
| 3 <head> | 3 <head> |
| 4 <title>MediaStream Recoder Browser Test (w/ MediaSource)</title> | 4 <title>MediaStream Recoder Browser Test (w/ MediaSource)</title> |
| 5 </head> | 5 </head> |
| 6 <body> | 6 <body> |
| 7 <div> Record Real-Time video content browser test.</div> | 7 <div> Record Real-Time video content browser test.</div> |
| 8 <video id="video" autoplay></video> | 8 <video id="video" autoplay></video> |
| 9 </body> | 9 </body> |
| 10 <script type="text/javascript" src="mediarecorder_test_utils.js"></script> | 10 <script type="text/javascript" src="mediarecorder_test_utils.js"></script> |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 35 console.log('Starting MediaRecorder instance'); | 35 console.log('Starting MediaRecorder instance'); |
| 36 document.getElementById("video").src = URL.createObjectURL(stream); | 36 document.getElementById("video").src = URL.createObjectURL(stream); |
| 37 var recorder = new MediaRecorder(stream, mimeType); | 37 var recorder = new MediaRecorder(stream, mimeType); |
| 38 console.log('Recorder object created.'); | 38 console.log('Recorder object created.'); |
| 39 recorder.start(slice); | 39 recorder.start(slice); |
| 40 console.log('Recorder started with time slice', slice); | 40 console.log('Recorder started with time slice', slice); |
| 41 resolve(recorder); | 41 resolve(recorder); |
| 42 }); | 42 }); |
| 43 } | 43 } |
| 44 | 44 |
| 45 function createMediaRecorder(stream, mimeType) { | |
| 46 return new Promise(function(resolve, reject) { | |
| 47 console.log('Starting MediaRecorder instance'); | |
| 48 document.getElementById("video").src = URL.createObjectURL(stream); | |
| 49 var recorder = new MediaRecorder(stream, mimeType); | |
| 50 console.log('Recorder object created.'); | |
| 51 resolve(recorder); | |
| 52 }); | |
| 53 } | |
| 54 | |
| 45 function testStartAndRecorderState() { | 55 function testStartAndRecorderState() { |
| 46 console.log('testStartAndRecorderState started.'); | 56 console.log('testStartAndRecorderState started.'); |
| 47 navigator.mediaDevices.getUserMedia(DEFAULT_CONSTRAINTS) | 57 navigator.mediaDevices.getUserMedia(DEFAULT_CONSTRAINTS) |
| 48 .then(function(stream) { | 58 .then(function(stream) { |
| 49 return createAndStartMediaRecorder(stream, | 59 return createAndStartMediaRecorder(stream, |
| 50 DEFAULT_RECORDER_MIME_TYPE); | 60 DEFAULT_RECORDER_MIME_TYPE); |
| 51 }) | 61 }) |
| 52 .then(function(recorder) { | 62 .then(function(recorder) { |
| 53 assertEquals('recording', recorder.state); | 63 assertEquals('recording', recorder.state); |
| 54 }) | 64 }) |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 164 ' empty blobs, there should be no such empty blobs.'); | 174 ' empty blobs, there should be no such empty blobs.'); |
| 165 }) | 175 }) |
| 166 .catch(function(err) { | 176 .catch(function(err) { |
| 167 return failTest(err.toString()); | 177 return failTest(err.toString()); |
| 168 }) | 178 }) |
| 169 .then(function() { | 179 .then(function() { |
| 170 reportTestSuccess(); | 180 reportTestSuccess(); |
| 171 }); | 181 }); |
| 172 } | 182 } |
| 173 | 183 |
| 184 function testStartAndStartEventTriggered() { | |
| 185 console.log('testStartAndStartEventTriggered started.'); | |
| 186 var theRecorder; | |
| 187 var startEventReceived = false; | |
| 188 navigator.mediaDevices.getUserMedia(DEFAULT_CONSTRAINTS) | |
| 189 .then(function(stream) { | |
| 190 return createMediaRecorder(stream, DEFAULT_RECORDER_MIME_TYPE); | |
| 191 }) | |
| 192 .then(function(recorder) { | |
| 193 theRecorder = recorder; | |
| 194 theRecorder.onstart = function(event) { | |
|
phoglund_chromium
2015/11/30 20:42:56
While I think this is fine, it would have been coo
cpaulin (no longer in chrome)
2015/12/02 00:05:53
Acknowledged.
| |
| 195 startEventReceived = true; | |
| 196 }; | |
| 197 }) | |
| 198 .then(function() { | |
| 199 theRecorder.start(); | |
| 200 }) | |
| 201 .then(function() { | |
| 202 return waitFor('Make sure the start event was received', | |
|
phoglund_chromium
2015/11/30 20:42:56
I realized I actually had to read up a bit to unde
cpaulin (no longer in chrome)
2015/12/02 00:05:54
Acknowledged.
| |
| 203 function() { | |
| 204 return startEventReceived == true; | |
| 205 }); | |
| 206 }) | |
| 207 .catch(function(err) { | |
| 208 return failTest(err.toString()); | |
| 209 }) | |
| 210 .then(function() { | |
| 211 reportTestSuccess(); | |
| 212 }); | |
| 213 } | |
| 214 | |
| 215 function testStartStopAndStopEventTriggered() { | |
| 216 console.log('testStartStopAndStopEventTriggered started.'); | |
| 217 var theRecorder; | |
| 218 var stopEventReceived = false; | |
| 219 navigator.mediaDevices.getUserMedia(DEFAULT_CONSTRAINTS) | |
| 220 .then(function(stream) { | |
| 221 return createAndStartMediaRecorder(stream, DEFAULT_RECORDER_MIME_TYPE); | |
| 222 }) | |
| 223 .then(function(recorder) { | |
| 224 recorder.onstop = function(event) { | |
| 225 stopEventReceived = true; | |
| 226 }; | |
| 227 recorder.stop(); | |
| 228 }) | |
| 229 .then(function() { | |
| 230 return waitFor('Make sure the stop event was received', | |
| 231 function() { | |
| 232 return stopEventReceived == true; | |
| 233 }); | |
| 234 }) | |
| 235 .catch(function(err) { | |
| 236 return failTest(err.toString()); | |
| 237 }) | |
| 238 .then(function() { | |
| 239 reportTestSuccess(); | |
| 240 }); | |
| 241 } | |
| 242 | |
| 243 function testResumeAndRecorderState() { | |
| 244 var theRecorder; | |
| 245 console.log('testResumeAndRecorderState started.'); | |
| 246 navigator.mediaDevices.getUserMedia(DEFAULT_CONSTRAINTS) | |
| 247 .then(function(stream) { | |
| 248 return createAndStartMediaRecorder(stream, | |
| 249 DEFAULT_RECORDER_MIME_TYPE); | |
| 250 }) | |
| 251 .then(function(recorder) { | |
| 252 theRecorder = recorder; | |
| 253 theRecorder.pause(); | |
| 254 }) | |
| 255 .then(function() { | |
| 256 theRecorder.resume(); | |
| 257 }) | |
| 258 .then(function() { | |
| 259 assertEquals('recording', theRecorder.state); | |
| 260 }) | |
| 261 .catch(function(err) { | |
| 262 return failTest(err.toString()); | |
| 263 }) | |
| 264 .then(function() { | |
| 265 reportTestSuccess(); | |
| 266 }); | |
| 267 } | |
| 268 | |
| 269 function testResumeAndResumeEventTriggered() { | |
| 270 var theRecorder; | |
| 271 var resumeEventReceived = false; | |
| 272 console.log('testStartAndResumeEventTriggered started.'); | |
| 273 navigator.mediaDevices.getUserMedia(DEFAULT_CONSTRAINTS) | |
| 274 .then(function(stream) { | |
| 275 return createAndStartMediaRecorder(stream, | |
| 276 DEFAULT_RECORDER_MIME_TYPE); | |
| 277 }) | |
| 278 .then(function(recorder) { | |
| 279 theRecorder = recorder; | |
| 280 theRecorder.pause(); | |
| 281 }) | |
| 282 .then(function() { | |
| 283 theRecorder.onresume = function(event) { | |
| 284 resumeEventReceived = true; | |
| 285 } | |
| 286 theRecorder.resume(); | |
| 287 }) | |
| 288 .then(function() { | |
| 289 return waitFor('Making sure the resume event has been received', | |
| 290 function() { | |
| 291 return resumeEventReceived == true; | |
| 292 }); | |
| 293 }) | |
| 294 .catch(function(err) { | |
| 295 return failTest(err.toString()); | |
| 296 }) | |
| 297 .then(function() { | |
| 298 reportTestSuccess(); | |
| 299 }); | |
| 300 } | |
| 301 | |
| 302 function testNoResumeWhileRecorderInactive() { | |
| 303 console.log('testNoResumeWhileRecorderInactive started.'); | |
| 304 navigator.mediaDevices.getUserMedia(DEFAULT_CONSTRAINTS) | |
| 305 .then(function(stream) { | |
| 306 return createMediaRecorder(stream, DEFAULT_RECORDER_MIME_TYPE); | |
| 307 }) | |
| 308 .then(function(recorder) { | |
| 309 recorder.resume(); | |
| 310 }) | |
| 311 .catch(function(err) { | |
| 312 reportTestSuccess(); | |
| 313 }) | |
| 314 .then(function() { | |
| 315 return failTest('Recorder resumed recording from inactive state.'); | |
| 316 }); | |
| 317 } | |
| 318 | |
| 319 function testResumeAndDataAvailable() { | |
| 320 console.log('testResumeAndDataAvailable started.'); | |
| 321 var theRecorder; | |
| 322 var videoSize = 0; | |
| 323 var emptyBlobs = 0; | |
| 324 navigator.mediaDevices.getUserMedia(DEFAULT_CONSTRAINTS) | |
| 325 .then(function(stream) { | |
| 326 return createAndStartMediaRecorder(stream, | |
| 327 DEFAULT_RECORDER_MIME_TYPE); | |
| 328 }) | |
| 329 .then(function(recorder) { | |
| 330 theRecorder = recorder; | |
| 331 theRecorder.pause(); | |
| 332 }) | |
| 333 .then(function() { | |
| 334 theRecorder.ondataavailable = function(event) { | |
| 335 if (event.data.size > 0) { | |
| 336 videoSize += event.data.size; | |
| 337 } else { | |
| 338 console.log('This dataavailable event is empty', event); | |
| 339 emptyBlobs += 1; | |
| 340 } | |
| 341 }; | |
| 342 }) | |
| 343 .then(function() { | |
| 344 theRecorder.resume(); | |
| 345 }) | |
| 346 .then(function() { | |
| 347 return waitFor('Make sure the recording has data after resuming', | |
| 348 function() { | |
| 349 return videoSize > 0; | |
| 350 }); | |
| 351 }) | |
| 352 .then(function() { | |
| 353 // There should be no empty blob while recording. | |
| 354 assertTrue(emptyBlobs == 0, 'Recording has ' + emptyBlobs + | |
| 355 ' empty blobs, there should be no such empty blobs.'); | |
| 356 }) | |
| 357 .catch(function(err) { | |
| 358 return failTest(err.toString()); | |
| 359 }) | |
| 360 .then(function() { | |
| 361 reportTestSuccess(); | |
| 362 }); | |
| 363 } | |
| 364 | |
| 365 | |
| 174 </script> | 366 </script> |
| 175 </body> | 367 </body> |
| 176 </html> | 368 </html> |
| OLD | NEW |