<!DOCTYPEHTML>
<html>
<head>
<title>Test that a MediaStream captured from one element plays back in another</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
<script type="text/javascript" src="manifest.js"></script>
</head>
<body>
<pre id="test">
<script class="testbody" type="text/javascript">
const manager = new MediaTestManager();
const stream = v.mozCaptureStreamUntilEnded();
vout.srcObject = stream;
is(vout.srcObject, stream,
`${token} set output element .srcObject correctly`);
isnot(stream.getTracks().length, 0, `${token} results in some tracks`);
const hadVideoTracks = stream.getVideoTracks().length >= 1;
// Wait for the resource fetch algorithm to have run, so that the media
// element is hooked up to the MediaStream and ready to go. If we don't do
// this, we're not guaranteed to render the very first video frame, which
// can make this test fail the drawImage test when a video resource only
// contains one frame.
await new Promise(r => vout.onloadstart = r);
v.play();
vout.play();
await Promise.race([
Promise.all([
new Promise(r => vout.onended = r),
new Promise(r => v.onended = r),
]),
new Promise((res, rej) => vout.onerror = () => rej(new Error(vout.error.message))),
new Promise((res, rej) => v.onerror = () => rej(new Error(v.error.message))),
]);
let duration = test.duration;
if (typeof(test.contentDuration) == "number") {
duration = test.contentDuration;
}
if (duration) {
// Unexpected results are tracked in bug 1839502
maybeTodoGreaterThanOrEqual(vout.currentTime, duration,
`${token} current time at end`);
}
is(vout.readyState, vout.HAVE_CURRENT_DATA,
`${token} checking readyState`);
ok(vout.ended, `${token} checking playback has ended`);
if (hadVideoTracks) {
ok(test.type.match(/^video/), `${token} is a video resource`);
checkDrawImage(vout, `${token} checking videoframe pixel has been drawn`);
}
vout.remove();
removeNodeAndSource(v);
}
(async () => {
SimpleTest.requestCompleteLog();
SimpleTest.waitForExplicitFinish();
await SpecialPowers.pushPrefEnv(
{ "set": [
["privacy.reduceTimerPrecision", false],
]});
let tests = gPlayTests;
// Filter out bug1377278.webm due to bug 1541401.
tests = tests.filter(t => !t.name.includes("1377278"));
// bug 1372457, bug 1526207 for drawImage -- restrict to codecs that can be
// decoded in software.
if (navigator.userAgent.includes("Android")) {
tests = tests.filter(t => !t.name.includes("mp4"));
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.