blob: 20cd93de73e6f0c4dddd3b30fce8f95b87603f10 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>media-source-append-remove-b-frame</title>
<script src="mock-media-source.js"></script>
<script src="../video-test.js"></script>
<script>
var source;
var sourceBuffer;
var initSegment;
if (window.internals)
internals.initializeMockMediaSource();
function ibpSampleRun() {
// IBP in presentation order, IPB in decode order.
return concatenateSamples([
makeASample(0, -1, 1, 1, 1, SAMPLE_FLAG.SYNC), // I
makeASample(2, 0, 1, 1, 1, SAMPLE_FLAG.NONE), // P
makeASample(1, 1, 1, 1, 1, SAMPLE_FLAG.NONE), // B
]);
}
window.addEventListener('load', async () => {
findMediaElement();
source = new MediaSource();
testExpected('source.readyState', 'closed');
const sourceOpened = waitFor(source, 'sourceopen');
const videoSource = document.createElement('source');
videoSource.type = 'video/mock; codecs=mock';
videoSource.src = URL.createObjectURL(source);
video.appendChild(videoSource);
await sourceOpened;
run('sourceBuffer = source.addSourceBuffer("video/mock; codecs=mock")');
initSegment = makeAInit(10, [makeATrack(1, 'mock', TRACK_KIND.VIDEO)]);
run('sourceBuffer.appendBuffer(initSegment)');
await waitFor(sourceBuffer, 'updateend');
run('sourceBuffer.appendBuffer(ibpSampleRun())');
await waitFor(sourceBuffer, 'updateend');
let enqueuedSamples = await internals.enqueuedSamplesForTrackID(sourceBuffer, 1);
enqueuedSamples.forEach(consoleWrite);
run('sourceBuffer.remove(1, 2)');
await waitFor(sourceBuffer, 'updateend');
// Even if .remove() sets trackBuffer.needsReenqueueing to true, reenqueueing will only happen after an append.
// So let's make an empty append.
run('sourceBuffer.appendBuffer(new Uint8Array())');
await waitFor(sourceBuffer, 'updateend');
consoleWrite("The frame with presentation time [1, 2) should have been deleted from the buffered samples and " +
"a reenqueue must have happened. That frame should not have been enqueued.");
consoleWrite("Buffered:");
bufferedSamples = await internals.bufferedSamplesForTrackId(sourceBuffer, 1);
bufferedSamples.forEach(consoleWrite);
consoleWrite("Enqueued:");
enqueuedSamples = await internals.enqueuedSamplesForTrackID(sourceBuffer, 1);
enqueuedSamples.forEach(consoleWrite);
endTest();
});
</script>
</head>
<body>
<video controls></video>
</body>
</html>