test_mediarecorder_record_timeslice.html (3315B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test MediaRecorder Record Timeslice</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 7 <script type="text/javascript" src="manifest.js"></script> 8 </head> 9 <body> 10 <pre id="test"> 11 <script class="testbody" type="text/javascript"> 12 var manager = new MediaTestManager; 13 14 /** 15 * Starts a test on every media recorder file included to check that a stream 16 * derived from the file can be recorded with a timeslice provided 17 */ 18 function startTest(test, token) { 19 var element = document.createElement('audio'); 20 var expectedMimeType = test.type; 21 22 element.token = token; 23 manager.started(token); 24 25 element.src = test.name; 26 element.test = test; 27 element.preload = "auto"; 28 29 // Set up MediaRecorder once loadedmetadata fires and tracks are available. 30 element.onloadedmetadata = function() { 31 element.onloadedmetadata = null; 32 33 const stream = element.mozCaptureStream(); 34 const mediaRecorder = 35 new MediaRecorder(stream, {mimeType: expectedMimeType}); 36 37 mediaRecorder.onerror = function () { 38 ok(false, 'Unexpected onerror callback fired'); 39 }; 40 41 mediaRecorder.onwarning = function () { 42 ok(false, 'Unexpected onwarning callback fired'); 43 }; 44 45 mediaRecorder.onstop = function () { 46 ok(false, 'Unexpected onstop callback fired'); 47 }; 48 49 var dataAvailableCount = 0; 50 var onDataAvailableFirst = false; 51 52 // This handler fires every 250ms to generate a blob. 53 mediaRecorder.ondataavailable = function (evt) { 54 info('ondataavailable fired'); 55 dataAvailableCount++; 56 57 ok(evt instanceof BlobEvent, 58 'Events fired from ondataavailable should be BlobEvent'); 59 is(evt.type, 'dataavailable', 60 'Event type should dataavailable'); 61 ok(evt.data.size >= 0, 62 'Blob data size received is greater than or equal to zero'); 63 64 is(evt.data.type, expectedMimeType, 65 'Blob data received should have type = ' + expectedMimeType); 66 is(mediaRecorder.mimeType, expectedMimeType, 67 'Mime type in ondataavailable = ' + mediaRecorder.mimeType); 68 69 // We'll stop recording upon the 1st blob being received 70 if (dataAvailableCount === 1) { 71 mediaRecorder.onstop = function () { 72 info('onstop fired'); 73 74 if (!onDataAvailableFirst) { 75 ok(false, 'onstop unexpectedly fired before ondataavailable'); 76 } 77 element.pause(); 78 manager.finished(token); 79 }; 80 81 mediaRecorder.stop(); 82 is(mediaRecorder.state, 'inactive', 83 'Media recorder is inactive after being stopped'); 84 is(mediaRecorder.stream, stream, 85 'Media recorder stream = element stream post recording'); 86 87 } else if (dataAvailableCount === 2) { 88 // Ensure we've received at least two ondataavailable events before onstop 89 onDataAvailableFirst = true; 90 } 91 }; 92 93 mediaRecorder.start(1); 94 element.play(); 95 is(mediaRecorder.state, 'recording', 'Media recorder should be recording'); 96 is(mediaRecorder.stream, stream, 97 'Media recorder stream = element stream at the start of recording'); 98 }; 99 } 100 101 manager.runTests(gMediaRecorderTests, startTest); 102 </script> 103 </pre> 104 </body> 105 </html>