summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/media-source/mediasource-h264-play-starved.html
blob: a3cdf3cb26f8a1b495ff66297a501b462b33620f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<!DOCTYPE html>
<html>
<head>
    <title>Test MediaSource behavior when the decoder is starved.</title>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
    <meta name="timeout" content="long">
    <link rel="author" title="Alicia Boya García" href="mailto:aboya@igalia.com"/>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="mediasource-util.js"></script>
</head>
<body>
<div id="log"></div>
<script>
    mediasource_test(function (test, video, mediaSource) {
        if (!MediaSource.isTypeSupported('video/mp4; codecs="avc1.4d001e"')) {
            // Format not supported, nothing to test in this platform.
            test.done();
            return;
        }

        let initSegment;
        let mediaSegment;

        const videoSB = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.4d001e"');

        MediaSourceUtil.loadBinaryData(test, "mp4/h264-starvation-init.mp4", initDownloaded);

        function initDownloaded(data) {
            initSegment = data;
            MediaSourceUtil.loadBinaryData(test, "mp4/h264-starvation-media.mp4", mediaDownloaded);
        }

        function mediaDownloaded(data) {
            mediaSegment = data;
            videoSB.appendBuffer(initSegment);
            videoSB.addEventListener("updateend", initSegmentAppended);
        }

        function initSegmentAppended() {
            videoSB.removeEventListener("updateend", initSegmentAppended);
            videoSB.appendBuffer(mediaSegment);
            videoSB.addEventListener("updateend", mediaSegmentAppended)
        }

        function mediaSegmentAppended() {
            video.play();

            video.addEventListener('timeupdate', function onTimeUpdate() {
                if (video.currentTime >= 2)
                    test.done();
            });
        }
    }, "Enough frames are played when the decoder is starved.")
</script>
</body>
</html>