blob: c09f273a5668626467be23c8ea572c8c961fd03b [file] [log] [blame]
<!doctype html>
<html>
<head>
<title>MediaRecorder H264 profile</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
let stream;
async function record(mimeType)
{
if (!stream)
stream = await navigator.mediaDevices.getUserMedia({ video : { width : 640 } });
const recorder = new MediaRecorder(stream, { mimeType : mimeType });
const promise = new Promise((resolve, reject) => {
recorder.ondataavailable = (e) => resolve(e.data);
setTimeout(() => reject("datavailable event timed out"), 15000);
});
recorder.start();
setTimeout(() => recorder.stop(), 1000);
return promise;
}
function parseAVCCBox(data)
{
return data;
const lengthAfterAVC1 = 10;
for (let i = 0; i < data.length - lengthAfterAVC1 - 4; ++i) {
if (data[i] === 97 && data[i + 1] === 118 && data[i + 2] === 99 && data[i + 3] === 67)
return data.slice(i + 4, i + 4 + lengthAfterAVC1);
}
return new Uint8Array();
}
promise_test(async (t) => {
const data = await record("video/mp4");
const content = parseAVCCBox(new Uint8Array(await data.arrayBuffer())).join(",");
if (content.length)
assert_true(content.includes(",66,"));
}, "Validate H264 baseline as default");
promise_test(async (t) => {
const data = await record("video/mp4;codecs=avc1.42E01F");
const content = parseAVCCBox(new Uint8Array(await data.arrayBuffer())).join(",");
if (content.length)
assert_true(content.includes(",66,"));
}, "Validate H264 baseline support");
promise_test(async (t) => {
const data = await record("video/mp4;codecs=avc1.4D001F");
const content = parseAVCCBox(new Uint8Array(await data.arrayBuffer())).join(",");
if (content.length)
assert_true(content.includes(",77,"));
}, "Validate H264 main support");
promise_test(async (t) => {
const data = await record("video/mp4;codecs=avc1.640029");
const content = parseAVCCBox(new Uint8Array(await data.arrayBuffer())).join(",");
if (content.length)
assert_true(content.includes(",100,"));
}, "Validate H264 high support");
</script>
</body>
</html>