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 <video id="remoteVideo" autoplay></video> | 9 <video id="remoteVideo" autoplay></video> |
10 </body> | 10 </body> |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 | 85 |
86 function createAndStartMediaRecorder(stream, mimeType, slice) { | 86 function createAndStartMediaRecorder(stream, mimeType, slice) { |
87 return new Promise(function(resolve, reject) { | 87 return new Promise(function(resolve, reject) { |
88 document.getElementById('video').src = URL.createObjectURL(stream); | 88 document.getElementById('video').src = URL.createObjectURL(stream); |
89 var recorder = new MediaRecorder(stream, {'mimeType' : mimeType}); | 89 var recorder = new MediaRecorder(stream, {'mimeType' : mimeType}); |
90 console.log('Recorder object created, mimeType = ' + mimeType); | 90 console.log('Recorder object created, mimeType = ' + mimeType); |
91 if (slice != undefined) { | 91 if (slice != undefined) { |
92 recorder.start(slice); | 92 recorder.start(slice); |
93 console.log('Recorder started with time slice', slice); | 93 console.log('Recorder started with time slice', slice); |
94 } else { | 94 } else { |
95 recorder.start(); | 95 recorder.start(0); |
96 } | 96 } |
97 resolve(recorder); | 97 resolve(recorder); |
98 }); | 98 }); |
99 } | 99 } |
100 | 100 |
101 function createMediaRecorder(stream, mimeType) { | 101 function createMediaRecorder(stream, mimeType) { |
102 return new Promise(function(resolve, reject) { | 102 return new Promise(function(resolve, reject) { |
103 var recorder = new MediaRecorder(stream, {'mimeType' : mimeType}); | 103 var recorder = new MediaRecorder(stream, {'mimeType' : mimeType}); |
104 console.log('Recorder object created.'); | 104 console.log('Recorder object created.'); |
105 resolve(recorder); | 105 resolve(recorder); |
106 }); | 106 }); |
107 } | 107 } |
108 | 108 |
109 // Tests that the MediaRecorder's start() function will cause the |state| to be | 109 // Tests that the MediaRecorder's start(0) function will cause the |state| to be |
110 // 'recording' and that a 'start' event is fired. | 110 // 'recording' and that a 'start' event is fired. |
111 function testStartAndRecorderState() { | 111 function testStartAndRecorderState() { |
112 var startEventReceived = false; | 112 var startEventReceived = false; |
113 navigator.mediaDevices.getUserMedia(DEFAULT_CONSTRAINTS) | 113 navigator.mediaDevices.getUserMedia(DEFAULT_CONSTRAINTS) |
114 .then(function(stream) { | 114 .then(function(stream) { |
115 return createMediaRecorder(stream, DEFAULT_RECORDER_MIME_TYPE); | 115 return createMediaRecorder(stream, DEFAULT_RECORDER_MIME_TYPE); |
116 }) | 116 }) |
117 .then(function(recorder) { | 117 .then(function(recorder) { |
118 recorder = recorder; | 118 recorder = recorder; |
119 recorder.onstart = function(event) { | 119 recorder.onstart = function(event) { |
120 startEventReceived = true; | 120 startEventReceived = true; |
121 assertEquals('recording', recorder.state); | 121 assertEquals('recording', recorder.state); |
122 }; | 122 }; |
123 recorder.start(); | 123 recorder.start(0); |
124 }) | 124 }) |
125 .then(function() { | 125 .then(function() { |
126 return waitFor('Make sure the start event was received', | 126 return waitFor('Make sure the start event was received', |
127 function() { | 127 function() { |
128 return startEventReceived; | 128 return startEventReceived; |
129 }); | 129 }); |
130 }) | 130 }) |
131 .catch(function(err) { | 131 .catch(function(err) { |
132 return failTest(err.toString()); | 132 return failTest(err.toString()); |
133 }) | 133 }) |
(...skipping 24 matching lines...) Expand all Loading... |
158 }); | 158 }); |
159 }) | 159 }) |
160 .catch(function(err) { | 160 .catch(function(err) { |
161 return failTest(err.toString()); | 161 return failTest(err.toString()); |
162 }) | 162 }) |
163 .then(function() { | 163 .then(function() { |
164 reportTestSuccess(); | 164 reportTestSuccess(); |
165 }); | 165 }); |
166 } | 166 } |
167 | 167 |
168 // Tests that when MediaRecorder's start() function is called, some data is | 168 // Tests that when MediaRecorder's start(0) function is called, some data is |
169 // made available by media recorder via dataavailable events, containing non | 169 // made available by media recorder via dataavailable events, containing non |
170 // empty blob data. | 170 // empty blob data. |
171 function testStartAndDataAvailable(codec) { | 171 function testStartAndDataAvailable(codec) { |
172 var videoSize = 0; | 172 var videoSize = 0; |
173 var emptyBlobs = 0; | 173 var emptyBlobs = 0; |
174 var timeStamps = []; | 174 var timeStamps = []; |
175 const mimeType = codec ? "video/webm;codecs=" + String(codec) : ""; | 175 const mimeType = codec ? "video/webm;codecs=" + String(codec) : ""; |
176 navigator.mediaDevices.getUserMedia(DEFAULT_CONSTRAINTS) | 176 navigator.mediaDevices.getUserMedia(DEFAULT_CONSTRAINTS) |
177 .then(function(stream) { | 177 .then(function(stream) { |
178 return createAndStartMediaRecorder(stream, mimeType); | 178 return createAndStartMediaRecorder(stream, mimeType); |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
422 return setupPeerConnection(localStream); | 422 return setupPeerConnection(localStream); |
423 }) | 423 }) |
424 .then(function(remoteStream) { | 424 .then(function(remoteStream) { |
425 return createMediaRecorder(remoteStream, mimeType); | 425 return createMediaRecorder(remoteStream, mimeType); |
426 }) | 426 }) |
427 .then(function(recorder) { | 427 .then(function(recorder) { |
428 recorder.ondataavailable = function(event) { | 428 recorder.ondataavailable = function(event) { |
429 timeStamps.push(event.timeStamp); | 429 timeStamps.push(event.timeStamp); |
430 videoSize += event.data.size; | 430 videoSize += event.data.size; |
431 }; | 431 }; |
432 recorder.start(); | 432 recorder.start(0); |
433 }) | 433 }) |
434 .then(function() { | 434 .then(function() { |
435 return waitFor('Making sure the recording has data', | 435 return waitFor('Making sure the recording has data', |
436 function() { | 436 function() { |
437 return videoSize > 0 && timeStamps.length > 100; | 437 return videoSize > 0 && timeStamps.length > 100; |
438 }); | 438 }); |
439 }) | 439 }) |
440 .catch(function(err) { | 440 .catch(function(err) { |
441 return failTest(err.toString()); | 441 return failTest(err.toString()); |
442 }) | 442 }) |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
493 oscillator.type = 'sine'; | 493 oscillator.type = 'sine'; |
494 oscillator.frequency.value = FREQUENCY; | 494 oscillator.frequency.value = FREQUENCY; |
495 var dest = context.createMediaStreamDestination(); | 495 var dest = context.createMediaStreamDestination(); |
496 dest.channelCount = 2; | 496 dest.channelCount = 2; |
497 oscillator.connect(dest); | 497 oscillator.connect(dest); |
498 createMediaRecorder(dest.stream, DEFAULT_RECORDER_MIME_TYPE) | 498 createMediaRecorder(dest.stream, DEFAULT_RECORDER_MIME_TYPE) |
499 .then(function(recorder) { | 499 .then(function(recorder) { |
500 recorder.ondataavailable = function(event) { | 500 recorder.ondataavailable = function(event) { |
501 audioSize += event.data.size; | 501 audioSize += event.data.size; |
502 }; | 502 }; |
503 recorder.start(); | 503 recorder.start(0); |
504 oscillator.start(); | 504 oscillator.start(); |
505 context.startRendering(); | 505 context.startRendering(); |
506 }) | 506 }) |
507 .then(function() { | 507 .then(function() { |
508 return waitFor('Make sure the recording has data', | 508 return waitFor('Make sure the recording has data', |
509 function() { | 509 function() { |
510 return audioSize > 0; | 510 return audioSize > 0; |
511 }); | 511 }); |
512 }) | 512 }) |
513 .catch(function(err) { | 513 .catch(function(err) { |
(...skipping 26 matching lines...) Expand all Loading... |
540 var errorEventReceived = false; | 540 var errorEventReceived = false; |
541 navigator.mediaDevices.getUserMedia(DEFAULT_CONSTRAINTS) | 541 navigator.mediaDevices.getUserMedia(DEFAULT_CONSTRAINTS) |
542 .then(function(stream) { | 542 .then(function(stream) { |
543 theStream = stream; | 543 theStream = stream; |
544 return createMediaRecorder(stream); | 544 return createMediaRecorder(stream); |
545 }) | 545 }) |
546 .then(function(recorder) { | 546 .then(function(recorder) { |
547 recorder.onerror = function(event) { | 547 recorder.onerror = function(event) { |
548 errorEventReceived = true; | 548 errorEventReceived = true; |
549 }; | 549 }; |
550 recorder.start(); | 550 recorder.start(0); |
551 // Add a new track, copy of an existing one for simplicity. | 551 // Add a new track, copy of an existing one for simplicity. |
552 theStream.addTrack(theStream.getTracks()[1].clone()); | 552 theStream.addTrack(theStream.getTracks()[1].clone()); |
553 }) | 553 }) |
554 .then(function() { | 554 .then(function() { |
555 return waitFor('Waiting for the Error Event', | 555 return waitFor('Waiting for the Error Event', |
556 function() { | 556 function() { |
557 return errorEventReceived; | 557 return errorEventReceived; |
558 }); | 558 }); |
559 }) | 559 }) |
560 .catch(function(err) { | 560 .catch(function(err) { |
(...skipping 11 matching lines...) Expand all Loading... |
572 var errorEventReceived = false; | 572 var errorEventReceived = false; |
573 navigator.mediaDevices.getUserMedia(DEFAULT_CONSTRAINTS) | 573 navigator.mediaDevices.getUserMedia(DEFAULT_CONSTRAINTS) |
574 .then(function(stream) { | 574 .then(function(stream) { |
575 theStream = stream; | 575 theStream = stream; |
576 return createMediaRecorder(stream); | 576 return createMediaRecorder(stream); |
577 }) | 577 }) |
578 .then(function(recorder) { | 578 .then(function(recorder) { |
579 recorder.onerror = function(event) { | 579 recorder.onerror = function(event) { |
580 errorEventReceived = true; | 580 errorEventReceived = true; |
581 }; | 581 }; |
582 recorder.start(); | 582 recorder.start(0); |
583 theStream.removeTrack(theStream.getTracks()[1]); | 583 theStream.removeTrack(theStream.getTracks()[1]); |
584 }) | 584 }) |
585 .then(function() { | 585 .then(function() { |
586 return waitFor('Waiting for the Error Event', | 586 return waitFor('Waiting for the Error Event', |
587 function() { | 587 function() { |
588 return errorEventReceived; | 588 return errorEventReceived; |
589 }); | 589 }); |
590 }) | 590 }) |
591 .catch(function(err) { | 591 .catch(function(err) { |
592 return failTest(err.toString()); | 592 return failTest(err.toString()); |
593 }) | 593 }) |
594 .then(function() { | 594 .then(function() { |
595 reportTestSuccess(); | 595 reportTestSuccess(); |
596 }); | 596 }); |
597 } | 597 } |
598 | 598 |
599 </script> | 599 </script> |
600 </body> | 600 </body> |
601 </html> | 601 </html> |
OLD | NEW |