| <!doctype html> |
| <html> |
| <head> |
| <title>MediaRecorder Creation</title> |
| <link rel="help" href="https://w3c.github.io/mediacapture-record/MediaRecorder.html#mediarecorder"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| </head> |
| <script> |
| // This test verifies that MediaRecorder can be created with different Media |
| // Stream Track combinations: 1 Video Track only, 1 Audio Track only and finally |
| // a Media Stream with both a Video and an Audio Track. Note that recording is |
| // _not_ started in this test, see MediaRecorder-audio-video.html for it. |
| |
| function makeAsyncTest(constraints, verifyStream, message) { |
| async_test(function(test) { |
| |
| const gotStream = test.step_func(function(stream) { |
| verifyStream(stream); |
| |
| var recorder = new MediaRecorder(stream); |
| assert_equals(recorder.state, "inactive"); |
| assert_not_equals(recorder.videoBitsPerSecond, 0); |
| assert_not_equals(recorder.audioBitsPerSecond, 0); |
| test.done(); |
| }); |
| |
| const onError = test.unreached_func('Error creating MediaStream.'); |
| navigator.mediaDevices.getUserMedia(constraints).then(gotStream, onError); |
| }, message); |
| } |
| |
| function verifyVideoOnlyStream(stream) { |
| assert_equals(stream.getAudioTracks().length, 0); |
| assert_equals(stream.getVideoTracks().length, 1); |
| assert_equals(stream.getVideoTracks()[0].readyState, 'live'); |
| } |
| function verifyAudioOnlyStream(stream) { |
| assert_equals(stream.getAudioTracks().length, 1); |
| assert_equals(stream.getVideoTracks().length, 0); |
| assert_equals(stream.getAudioTracks()[0].readyState, 'live'); |
| } |
| function verifyAudioVideoStream(stream) { |
| assert_equals(stream.getAudioTracks().length, 1); |
| assert_equals(stream.getVideoTracks().length, 1); |
| assert_equals(stream.getVideoTracks()[0].readyState, 'live'); |
| assert_equals(stream.getAudioTracks()[0].readyState, 'live'); |
| } |
| |
| // Note: webkitGetUserMedia() must be called with at least video or audio true. |
| makeAsyncTest({video:true}, verifyVideoOnlyStream, 'Video-only MediaRecorder'); |
| makeAsyncTest({audio:true}, verifyAudioOnlyStream, 'Audio-only MediaRecorder'); |
| makeAsyncTest({audio:true, video:true}, verifyAudioVideoStream, 'Video+Audio MediaRecorder'); |
| |
| </script> |
| </html> |