Bug 1304950 - Defer mozCaptureStream() until after "loadedmetadata". r?jwwang
Starting capture after tracks are known ensures that we can start getting data
immediately as we play() the element. Before there was a risk of missing some
initial data, which caused this intermittent.
MozReview-Commit-ID: FxaiiVtKaKD
--- a/dom/media/test/test_mediarecorder_record_timeslice.html
+++ b/dom/media/test/test_mediarecorder_record_timeslice.html
@@ -19,24 +19,24 @@ function startTest(test, token) {
var element = document.createElement('audio');
var expectedMimeType = test.type.substring(0, test.type.indexOf(';'));
element.token = token;
manager.started(token);
element.src = test.name;
element.test = test;
- element.stream = element.mozCaptureStream();
element.preload = "auto";
// Set up MediaRecorder once loadedmetadata fires and tracks are available.
element.onloadedmetadata = function() {
element.onloadedmetadata = null;
- var mediaRecorder = new MediaRecorder(element.stream);
+ const stream = element.mozCaptureStream();
+ const mediaRecorder = new MediaRecorder(stream);
mediaRecorder.onerror = function () {
ok(false, 'Unexpected onerror callback fired');
};
mediaRecorder.onwarning = function () {
ok(false, 'Unexpected onwarning callback fired');
};
@@ -75,29 +75,29 @@ function startTest(test, token) {
}
element.pause();
manager.finished(token);
};
mediaRecorder.stop();
is(mediaRecorder.state, 'inactive',
'Media recorder is inactive after being stopped');
- is(mediaRecorder.stream, element.stream,
+ is(mediaRecorder.stream, stream,
'Media recorder stream = element stream post recording');
} else if (dataAvailableCount === 2) {
// Ensure we've received at least two ondataavailable events before onstop
onDataAvailableFirst = true;
}
};
mediaRecorder.start(250);
element.play();
is(mediaRecorder.state, 'recording', 'Media recorder should be recording');
- is(mediaRecorder.stream, element.stream,
+ is(mediaRecorder.stream, stream,
'Media recorder stream = element stream at the start of recording');
};
}
manager.runTests(gMediaRecorderTests, startTest);
</script>
</pre>
</body>