92 lines
3.9 KiB
HTML
92 lines
3.9 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src=video-test.js></script>
|
|
<script src=media-file.js></script>
|
|
<script>
|
|
var canPlayThroughCount = 0;
|
|
function onCanPlayThrough() {
|
|
if (++canPlayThroughCount == document.getElementsByTagName('video').length + document.getElementsByTagName('audio').length) {
|
|
endTest();
|
|
return;
|
|
}
|
|
}
|
|
function onError(e) {
|
|
var type = e.target.type;
|
|
if (!type) {
|
|
var src = e.target.src;
|
|
var semicolon;
|
|
if ((src.substr(0,5) == "data:") && ((semicolon = src.substr(5).indexOf(';')) > 0))
|
|
type = src.substr(5).substr(0, semicolon);
|
|
if (!type) {
|
|
failTest("Couldn't find type");
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (e.target.tagName == 'SOURCE' && !e.target.parentNode.canPlayType(type)) {
|
|
// Expected error; ignore.
|
|
return;
|
|
}
|
|
var id = (e.target.tagName == 'SOURCE' ? e.target.parentNode.id : e.target.id);
|
|
failTest("tag: " + e.target.tagName + ", id: " + id + ", src: " + e.target.src);
|
|
}
|
|
|
|
function createSourceOfType(type)
|
|
{
|
|
const source = document.createElement('source');
|
|
source.type = `video/${type}`;
|
|
source.src = dataURL(type);
|
|
return source;
|
|
}
|
|
|
|
function setup()
|
|
{
|
|
let video = document.getElementById('v3');
|
|
video.appendChild(createSourceOfType('mp4'));
|
|
video.appendChild(createSourceOfType('ogg'));
|
|
|
|
video = document.getElementById('v4');
|
|
video.appendChild(createSourceOfType('mp4'));
|
|
video.appendChild(createSourceOfType('ogg'));
|
|
}
|
|
</script>
|
|
</head>
|
|
<body onload="setup()">
|
|
Test that fallback among codecs is done correctly regardless of their order.
|
|
<!-- This could be made far more general, testing all permutations of
|
|
(audio|video)Codecs and so on, but in reality we only have these 4
|
|
test files, so simply enumerating them manually and testing they
|
|
all hit canplaythrough is good enough. Someday when many more
|
|
files are present, consider generalizing this.
|
|
-->
|
|
|
|
<video id='v1' controls oncanplaythrough='onCanPlayThrough()' onerror='onError(event)'>
|
|
<source onerror='onError(event)' type="video/mp4" src="content/test.mp4"/>
|
|
<source onerror='onError(event)' type="video/ogg" src="content/test.ogv"/>
|
|
</video>
|
|
|
|
<video id='v2' controls oncanplaythrough='onCanPlayThrough()' onerror='onError(event)'>
|
|
<source onerror='onError(event)' type="video/ogg" src="content/test.ogv"/>
|
|
<source onerror='onError(event)' type="video/mp4" src="content/test.mp4"/>
|
|
</video>
|
|
|
|
<audio id='a1' controls oncanplaythrough='onCanPlayThrough()' onerror='onError(event)'>
|
|
<source onerror='onError(event)' type="audio/wav" src="content/test.wav"/>
|
|
<source onerror='onError(event)' type="audio/ogg" src="content/test.oga"/>
|
|
</audio>
|
|
|
|
<audio id='a2' controls oncanplaythrough='onCanPlayThrough()' onerror='onError(event)'>
|
|
<source onerror='onError(event)' type="audio/ogg" src="content/test.oga"/>
|
|
<source onerror='onError(event)' type="audio/wav" src="content/test.wav"/>
|
|
</audio>
|
|
|
|
<video id="v3" controls oncanplaythrough='onCanPlayThrough()' onerror='onError(event)'>
|
|
</video>
|
|
|
|
<video id="v4" controls oncanplaythrough='onCanPlayThrough()' onerror='onError(event)'>
|
|
</video>
|
|
|
|
</body>
|
|
</html>
|