blob: 43ee488752a4bb46e36464b4b048c4b64f3e9766 [file] [log] [blame]
<!doctype html>
<html>
<head>
<title>MediaRecorder Dataavailable</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>
<body>
<canvas id="canvas" width="200" height="200">
</canvas>
<script>
var context;
if (window.internals)
internals.setCustomPrivateRecorderCreator();
function createVideoStream() {
const canvas = document.getElementById("canvas");
context = canvas.getContext('2d');
return canvas.captureStream();
}
function drawSomethingOnCanvas() {
context.fillStyle = "red";
context.fillRect(0, 0, 10, 10);
}
async_test(t => {
const video = createVideoStream();
const recorder = new MediaRecorder(video);
const reader = new FileReader();
recorder.ondataavailable = t.step_func(blobEvent => {
reader.readAsText(blobEvent.data);
reader.onloadend = t.step_func(() => {
assert_not_equals(reader.result.indexOf('Video'), -1, 'MediaRecorder successfully captured video buffers');
assert_equals(reader.result.indexOf('Audio'), -1, 'MediaRecorder does not capture audio buffers for a video-only stream');
t.done();
});
});
recorder.start();
assert_equals(recorder.state, 'recording', 'MediaRecorder has been started successfully');
drawSomethingOnCanvas();
setTimeout(() => {
recorder.stop();
}, 1000);
}, 'MediaRecorder will fire a dataavailable event which only contains video buffers for a video-only stream when stop() is called');
async_test(t => {
const ac = new AudioContext();
const osc = ac.createOscillator();
const dest = ac.createMediaStreamDestination();
const audio = dest.stream;
osc.connect(dest);
const recorder = new MediaRecorder(audio);
const reader = new FileReader();
recorder.ondataavailable = t.step_func(blobEvent => {
reader.readAsText(blobEvent.data);
reader.onloadend = t.step_func(() => {
assert_not_equals(reader.result.indexOf('Audio'), -1, 'MediaRecorder successfully captured video buffers');
assert_equals(reader.result.indexOf('Video'), -1, 'MediaRecorder does not capture audio buffers for a video-only stream');
t.done();
});
});
recorder.start();
osc.start();
assert_equals(recorder.state, 'recording', 'MediaRecorder has been started successfully');
setTimeout(() => {
recorder.stop();
osc.stop();
}, 1000);
}, 'MediaRecorder will fire a dataavailable event which only contains audio buffers for a audio-only stream when stop() is called');
async_test(t => {
const ac = new AudioContext();
const osc = ac.createOscillator();
const dest = ac.createMediaStreamDestination();
const audio = dest.stream;
osc.connect(dest);
const video = createVideoStream();
assert_equals(video.getAudioTracks().length, 0, "video mediastream starts with no audio track");
assert_equals(audio.getAudioTracks().length, 1, "audio mediastream starts with one audio track");
video.addTrack(audio.getAudioTracks()[0]);
assert_equals(video.getAudioTracks().length, 1, "video mediastream starts with one audio track");
const recorder = new MediaRecorder(video);
const reader = new FileReader();
recorder.ondataavailable = t.step_func(blobEvent => {
reader.readAsText(blobEvent.data);
reader.onloadend = t.step_func(() => {
assert_not_equals(reader.result.indexOf('Audio'), -1, 'MediaRecorder successfully captured video buffers');
assert_not_equals(reader.result.indexOf('Video'), -1, 'MediaRecorder does not capture audio buffers for a video-only stream');
t.done();
});
});
recorder.start();
osc.start();
drawSomethingOnCanvas();
assert_equals(recorder.state, 'recording', 'MediaRecorder has been started successfully');
setTimeout(() => {
recorder.stop();
osc.stop();
}, 1000);
}, 'MediaRecorder will fire a dataavailable event which only contains both video and audio buffers when stop() is called');
</script>
</body>
</html>