summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/media-source/mediasource-addsourcebuffer.html
blob: a95155aefc281aa1d5e83ccdcc5663122af9fc40 (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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<!DOCTYPE html>
<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
<html>
    <head>
        <title>MediaSource.addSourceBuffer() test cases</title>
        <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, mediaElement, mediaSource)
          {
              mediaSource.endOfStream();
              assert_throws_dom("InvalidStateError",
                          function() { mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE); },
                          "addSourceBuffer() threw an exception when in 'ended' state.");
              test.done();
          }, "Test addSourceBuffer() in 'ended' state.");

          mediasource_test(function(test, mediaElement, mediaSource)
          {
              assert_throws_js(TypeError,
                          function() { mediaSource.addSourceBuffer(""); },
                          "addSourceBuffer() threw an exception when passed an empty string.");
              test.done();
          }, "Test addSourceBuffer() with empty type");

          mediasource_test(function(test, mediaElement, mediaSource)
          {
              assert_throws_dom("NotSupportedError",
                          function() { mediaSource.addSourceBuffer(null); },
                          "addSourceBuffer() threw an exception when passed null.");
              test.done();
          }, "Test addSourceBuffer() with null");

          mediasource_test(function(test, mediaElement, mediaSource)
          {
              assert_throws_dom("NotSupportedError",
                          function() { mediaSource.addSourceBuffer("invalidType"); },
                          "addSourceBuffer() threw an exception for an unsupported type.");
              test.done();
          }, "Test addSourceBuffer() with unsupported type");

          mediasource_test(function(test, mediaElement, mediaSource)
          {
              var mimetype = 'video/webm;codecs="vp8,vorbis"';

              assert_true(MediaSource.isTypeSupported(mimetype), mimetype + " is supported");

              var sourceBuffer = mediaSource.addSourceBuffer(mimetype);
              assert_true(sourceBuffer != null, "New SourceBuffer returned");
              assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers");
              assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is not in mediaSource.activeSourceBuffers");
              test.done();
          }, "Test addSourceBuffer() with Vorbis and VP8");

          mediasource_test(function(test, mediaElement, mediaSource)
          {
              var videoMimetype = 'video/webm;codecs="vp8"';
              var audioMimetype = 'audio/webm;codecs="vorbis"';

              assert_true(MediaSource.isTypeSupported(videoMimetype), videoMimetype + " is supported");
              assert_true(MediaSource.isTypeSupported(audioMimetype), audioMimetype + " is supported");

              var sourceBufferA = mediaSource.addSourceBuffer(videoMimetype);
              var sourceBufferB = mediaSource.addSourceBuffer(audioMimetype);
              assert_equals(mediaSource.sourceBuffers[0], sourceBufferA, "sourceBufferA is in mediaSource.sourceBuffers");
              assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferA is not in mediaSource.activeSourceBuffers");
              assert_equals(mediaSource.sourceBuffers[1], sourceBufferB, "sourceBufferB is in mediaSource.sourceBuffers");
              assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferB is not in mediaSource.activeSourceBuffers");
              test.done();
          }, "Test addSourceBuffer() with Vorbis and VP8 in separate SourceBuffers");

          mediasource_test(function(test, mediaElement, mediaSource)
          {
              var mimetype = MediaSourceUtil.VIDEO_ONLY_TYPE;

              assert_true(MediaSource.isTypeSupported(mimetype), mimetype + " is supported");

              var sourceBuffer = mediaSource.addSourceBuffer(mimetype);
              assert_true(sourceBuffer != null, "New SourceBuffer returned");
              assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers");
              assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is not in mediaSource.activeSourceBuffers");
              test.done();
          }, "Test addSourceBuffer() video only");

          mediasource_test(function(test, mediaElement, mediaSource)
          {
              var mimetype = MediaSourceUtil.AUDIO_ONLY_TYPE;

              assert_true(MediaSource.isTypeSupported(mimetype), mimetype + " is supported");

              var sourceBuffer = mediaSource.addSourceBuffer(mimetype);
              assert_true(sourceBuffer != null, "New SourceBuffer returned");
              assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers");
              assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is not in mediaSource.activeSourceBuffers");
              test.done();
          }, "Test addSourceBuffer() audio only");

          mediasource_test(function(test, mediaElement, mediaSource)
          {
              var mimetype = 'video/mp4;codecs="avc1.4D4001,mp4a.40.2"';

              assert_true(MediaSource.isTypeSupported(mimetype), mimetype + " is supported");

              var sourceBuffer = mediaSource.addSourceBuffer(mimetype);
              assert_true(sourceBuffer != null, "New SourceBuffer returned");
              assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers");
              assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is not in mediaSource.activeSourceBuffers");
              test.done();
          }, "Test addSourceBuffer() with AAC and H.264");

          mediasource_test(function(test, mediaElement, mediaSource)
          {
              var videoMimetype = 'video/mp4;codecs="avc1.4D4001"';
              var audioMimetype = 'audio/mp4;codecs="mp4a.40.2"';

              assert_true(MediaSource.isTypeSupported(videoMimetype), videoMimetype + " is supported");
              assert_true(MediaSource.isTypeSupported(audioMimetype), audioMimetype + " is supported");

              var sourceBufferA = mediaSource.addSourceBuffer(videoMimetype);
              var sourceBufferB = mediaSource.addSourceBuffer(audioMimetype);
              assert_equals(mediaSource.sourceBuffers[0], sourceBufferA, "sourceBufferA is in mediaSource.sourceBuffers");
              assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferA is not in mediaSource.activeSourceBuffers");
              assert_equals(mediaSource.sourceBuffers[1], sourceBufferB, "sourceBufferB is in mediaSource.sourceBuffers");
              assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferB is not in mediaSource.activeSourceBuffers");
              test.done();
          }, "Test addSourceBuffer() with AAC and H.264 in separate SourceBuffers");
        </script>
    </body>
</html>