blob: 1917ae0d376932cf7d937a4cce914a2946fdcaf0 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>media-source-monitor-playing-event</title>
<script src="mock-media-source.js"></script>
<script src="../video-test.js"></script>
<script>
var source;
var sourceBuffer;
var initSegment;
var sample;
var handleVideoEvents = [
"loadstart",
"waiting",
"loadedmetadata",
"loadeddata",
"canplay",
"canplaythrough",
"pause",
"ended",
];
var readyStateString = [
"HAVE_NOTHING",
"HAVE_METADATA",
"HAVE_CURRENT_DATA",
"HAVE_FUTURE_DATA",
"HAVE_ENOUGH_DATA"
];
if (window.internals)
internals.initializeMockMediaSource();
window.addEventListener('load', async() => {
findMediaElement();
for (var i = 0; i < handleVideoEvents.length ; i++)
waitForEvent(handleVideoEvents[i]);
source = new MediaSource();
testExpected('source.readyState', 'closed');
const videoSource = document.createElement('source');
videoSource.type = 'video/mock; codecs=mock';
videoSource.src = URL.createObjectURL(source);
video.appendChild(videoSource);
await waitFor(source, 'sourceopen');
sourceBuffer = source.addSourceBuffer("video/mock; codecs=mock");
initSegment = makeAInit(100, [makeATrack(1, 'mock', TRACK_KIND.VIDEO)]);
run('sourceBuffer.appendBuffer(initSegment)');
await waitFor(sourceBuffer, 'updateend');
consoleWrite('video.readyState : ' + readyStateString[video.readyState]);
sample = makeASample(0, 0, 1, 1, 1, SAMPLE_FLAG.SYNC, 1);
// This append changes ready state to HAVE_FUTURE_DATA.
run('sourceBuffer.appendBuffer(sample)');
await waitFor(sourceBuffer, 'updateend');
consoleWrite('video.readyState : ' + readyStateString[video.readyState]);
sample = makeASample(1, 1, 9, 1, 1, SAMPLE_FLAG.SYNC, 1);
// This append changes the ready state to HAVE_ENOUGH_DATA and fires the playing event.
run('sourceBuffer.appendBuffer(sample)');
await Promise.all([waitFor(mediaElement, 'playing'), waitFor(sourceBuffer, 'updateend')]);
consoleWrite('video.readyState : ' + readyStateString[video.readyState]);
// This remove changes ready state to HAVE_METADATA.
run('sourceBuffer.remove(0,10)');
await waitFor(sourceBuffer, 'updateend');
await sleepFor(1000);
consoleWrite('video.readyState : ' + readyStateString[video.readyState]);
sample = makeASample(0, 0, 1, 1, 1, SAMPLE_FLAG.SYNC, 1);
run('sourceBuffer.appendBuffer(sample)');
await waitFor(sourceBuffer, 'updateend');
consoleWrite('video.readyState : ' + readyStateString[video.readyState]);
sample = makeASample(1, 1, 9, 1, 1, SAMPLE_FLAG.SYNC, 1);
// This append changes the ready state to HAVE_ENOUGH_DATA and fires the playing event.
run('sourceBuffer.appendBuffer(sample)');
await Promise.all([waitFor(mediaElement, 'playing'), waitFor(sourceBuffer, 'updateend')]);
consoleWrite('video.readyState : ' + readyStateString[video.readyState]);
endTest();
});
</script>
</head>
<body>
<div>This test checks if the playing event fires when the ready state changes from HAVE_METADATA to HAVE_FUTURE_DATA or higher.</div>
<video autoplay></video>
</body>
</html>