@transmitlive/m3u8-parser 4.7.2-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/CONTRIBUTING.md +30 -0
  2. package/LICENSE +13 -0
  3. package/README.md +388 -0
  4. package/dist/m3u8-parser.cjs.js +1563 -0
  5. package/dist/m3u8-parser.es.js +1549 -0
  6. package/dist/m3u8-parser.js +1748 -0
  7. package/dist/m3u8-parser.min.js +2 -0
  8. package/index.html +15 -0
  9. package/package.json +100 -0
  10. package/scripts/karma.conf.js +12 -0
  11. package/scripts/rollup.config.js +47 -0
  12. package/src/index.js +19 -0
  13. package/src/line-stream.js +35 -0
  14. package/src/parse-stream.js +619 -0
  15. package/src/parser.js +748 -0
  16. package/test/fixtures/integration/absoluteUris.js +31 -0
  17. package/test/fixtures/integration/absoluteUris.m3u8 +12 -0
  18. package/test/fixtures/integration/allowCache.js +165 -0
  19. package/test/fixtures/integration/allowCache.m3u8 +58 -0
  20. package/test/fixtures/integration/allowCacheInvalid.js +21 -0
  21. package/test/fixtures/integration/allowCacheInvalid.m3u8 +10 -0
  22. package/test/fixtures/integration/alternateAudio.js +56 -0
  23. package/test/fixtures/integration/alternateAudio.m3u8 +9 -0
  24. package/test/fixtures/integration/alternateVideo.js +48 -0
  25. package/test/fixtures/integration/alternateVideo.m3u8 +8 -0
  26. package/test/fixtures/integration/brightcove.js +57 -0
  27. package/test/fixtures/integration/brightcove.m3u8 +9 -0
  28. package/test/fixtures/integration/byteRange.js +161 -0
  29. package/test/fixtures/integration/byteRange.m3u8 +56 -0
  30. package/test/fixtures/integration/dateTime.js +27 -0
  31. package/test/fixtures/integration/dateTime.m3u8 +12 -0
  32. package/test/fixtures/integration/diff-init-key.js +164 -0
  33. package/test/fixtures/integration/diff-init-key.m3u8 +57 -0
  34. package/test/fixtures/integration/disallowCache.js +21 -0
  35. package/test/fixtures/integration/disallowCache.m3u8 +10 -0
  36. package/test/fixtures/integration/disc-sequence.js +32 -0
  37. package/test/fixtures/integration/disc-sequence.m3u8 +15 -0
  38. package/test/fixtures/integration/discontinuity.js +59 -0
  39. package/test/fixtures/integration/discontinuity.m3u8 +26 -0
  40. package/test/fixtures/integration/domainUris.js +31 -0
  41. package/test/fixtures/integration/domainUris.m3u8 +12 -0
  42. package/test/fixtures/integration/empty.js +5 -0
  43. package/test/fixtures/integration/empty.m3u8 +0 -0
  44. package/test/fixtures/integration/emptyAllowCache.js +21 -0
  45. package/test/fixtures/integration/emptyAllowCache.m3u8 +10 -0
  46. package/test/fixtures/integration/emptyMediaSequence.js +31 -0
  47. package/test/fixtures/integration/emptyMediaSequence.m3u8 +14 -0
  48. package/test/fixtures/integration/emptyPlaylistType.js +40 -0
  49. package/test/fixtures/integration/emptyPlaylistType.m3u8 +16 -0
  50. package/test/fixtures/integration/emptyTargetDuration.js +57 -0
  51. package/test/fixtures/integration/emptyTargetDuration.m3u8 +10 -0
  52. package/test/fixtures/integration/encrypted.js +61 -0
  53. package/test/fixtures/integration/encrypted.m3u8 +28 -0
  54. package/test/fixtures/integration/event.js +41 -0
  55. package/test/fixtures/integration/event.m3u8 +16 -0
  56. package/test/fixtures/integration/extXPlaylistTypeInvalidPlaylist.js +15 -0
  57. package/test/fixtures/integration/extXPlaylistTypeInvalidPlaylist.m3u8 +8 -0
  58. package/test/fixtures/integration/extinf.js +165 -0
  59. package/test/fixtures/integration/extinf.m3u8 +57 -0
  60. package/test/fixtures/integration/fmp4.js +44 -0
  61. package/test/fixtures/integration/fmp4.m3u8 +14 -0
  62. package/test/fixtures/integration/headerOnly.js +5 -0
  63. package/test/fixtures/integration/headerOnly.m3u8 +1 -0
  64. package/test/fixtures/integration/invalidAllowCache.js +21 -0
  65. package/test/fixtures/integration/invalidAllowCache.m3u8 +10 -0
  66. package/test/fixtures/integration/invalidMediaSequence.js +31 -0
  67. package/test/fixtures/integration/invalidMediaSequence.m3u8 +14 -0
  68. package/test/fixtures/integration/invalidPlaylistType.js +40 -0
  69. package/test/fixtures/integration/invalidPlaylistType.m3u8 +16 -0
  70. package/test/fixtures/integration/invalidTargetDuration.js +164 -0
  71. package/test/fixtures/integration/invalidTargetDuration.m3u8 +57 -0
  72. package/test/fixtures/integration/liveMissingSegmentDuration.js +25 -0
  73. package/test/fixtures/integration/liveMissingSegmentDuration.m3u8 +9 -0
  74. package/test/fixtures/integration/liveStart30sBefore.js +54 -0
  75. package/test/fixtures/integration/liveStart30sBefore.m3u8 +22 -0
  76. package/test/fixtures/integration/llhls-byte-range.js +253 -0
  77. package/test/fixtures/integration/llhls-byte-range.m3u8 +66 -0
  78. package/test/fixtures/integration/llhls-delta-byte-range.js +149 -0
  79. package/test/fixtures/integration/llhls-delta-byte-range.m3u8 +30 -0
  80. package/test/fixtures/integration/llhls.js +214 -0
  81. package/test/fixtures/integration/llhls.m3u8 +56 -0
  82. package/test/fixtures/integration/llhlsDelta.js +186 -0
  83. package/test/fixtures/integration/llhlsDelta.m3u8 +50 -0
  84. package/test/fixtures/integration/manifestExtTTargetdurationNegative.js +14 -0
  85. package/test/fixtures/integration/manifestExtTTargetdurationNegative.m3u8 +5 -0
  86. package/test/fixtures/integration/manifestExtXEndlistEarly.js +35 -0
  87. package/test/fixtures/integration/manifestExtXEndlistEarly.m3u8 +14 -0
  88. package/test/fixtures/integration/manifestNoExtM3u.js +15 -0
  89. package/test/fixtures/integration/manifestNoExtM3u.m3u8 +4 -0
  90. package/test/fixtures/integration/master-fmp4.js +465 -0
  91. package/test/fixtures/integration/master-fmp4.m3u8 +76 -0
  92. package/test/fixtures/integration/master.js +57 -0
  93. package/test/fixtures/integration/master.m3u8 +10 -0
  94. package/test/fixtures/integration/media.js +31 -0
  95. package/test/fixtures/integration/media.m3u8 +12 -0
  96. package/test/fixtures/integration/mediaSequence.js +31 -0
  97. package/test/fixtures/integration/mediaSequence.m3u8 +14 -0
  98. package/test/fixtures/integration/missingEndlist.js +19 -0
  99. package/test/fixtures/integration/missingEndlist.m3u8 +6 -0
  100. package/test/fixtures/integration/missingExtinf.js +27 -0
  101. package/test/fixtures/integration/missingExtinf.m3u8 +11 -0
  102. package/test/fixtures/integration/missingMediaSequence.js +31 -0
  103. package/test/fixtures/integration/missingMediaSequence.m3u8 +13 -0
  104. package/test/fixtures/integration/missingSegmentDuration.js +31 -0
  105. package/test/fixtures/integration/missingSegmentDuration.m3u8 +11 -0
  106. package/test/fixtures/integration/multipleAudioGroups.js +89 -0
  107. package/test/fixtures/integration/multipleAudioGroups.m3u8 +17 -0
  108. package/test/fixtures/integration/multipleAudioGroupsCombinedMain.js +88 -0
  109. package/test/fixtures/integration/multipleAudioGroupsCombinedMain.m3u8 +17 -0
  110. package/test/fixtures/integration/multipleTargetDurations.js +28 -0
  111. package/test/fixtures/integration/multipleTargetDurations.m3u8 +8 -0
  112. package/test/fixtures/integration/multipleVideo.js +74 -0
  113. package/test/fixtures/integration/multipleVideo.m3u8 +16 -0
  114. package/test/fixtures/integration/negativeMediaSequence.js +31 -0
  115. package/test/fixtures/integration/negativeMediaSequence.m3u8 +14 -0
  116. package/test/fixtures/integration/playlist.js +165 -0
  117. package/test/fixtures/integration/playlist.m3u8 +57 -0
  118. package/test/fixtures/integration/playlistMediaSequenceHigher.js +16 -0
  119. package/test/fixtures/integration/playlistMediaSequenceHigher.m3u8 +8 -0
  120. package/test/fixtures/integration/start.js +36 -0
  121. package/test/fixtures/integration/start.m3u8 +13 -0
  122. package/test/fixtures/integration/streamInfInvalid.js +24 -0
  123. package/test/fixtures/integration/streamInfInvalid.m3u8 +6 -0
  124. package/test/fixtures/integration/twoMediaSequences.js +31 -0
  125. package/test/fixtures/integration/twoMediaSequences.m3u8 +15 -0
  126. package/test/fixtures/integration/versionInvalid.js +16 -0
  127. package/test/fixtures/integration/versionInvalid.m3u8 +8 -0
  128. package/test/fixtures/integration/whiteSpace.js +31 -0
  129. package/test/fixtures/integration/whiteSpace.m3u8 +13 -0
  130. package/test/fixtures/integration/zeroDuration.js +16 -0
  131. package/test/fixtures/integration/zeroDuration.m3u8 +7 -0
  132. package/test/line-stream.test.js +80 -0
  133. package/test/parse-stream.test.js +903 -0
  134. package/test/parser.test.js +884 -0
@@ -0,0 +1,35 @@
1
+ module.exports = {
2
+ allowCache: true,
3
+ mediaSequence: 0,
4
+ segments: [
5
+ {
6
+ duration: 10,
7
+ timeline: 0,
8
+ uri: '/test/ts-files/zencoder/gogo/00001.ts'
9
+ },
10
+ {
11
+ duration: 10,
12
+ timeline: 0,
13
+ uri: '/test/ts-files/zencoder/gogo/00002.ts'
14
+ },
15
+ {
16
+ duration: 10,
17
+ timeline: 0,
18
+ uri: '/test/ts-files/zencoder/gogo/00003.ts'
19
+ },
20
+ {
21
+ duration: 10,
22
+ timeline: 0,
23
+ uri: '/test/ts-files/zencoder/gogo/00004.ts'
24
+ },
25
+ {
26
+ duration: 10,
27
+ timeline: 0,
28
+ uri: '/test/ts-files/zencoder/gogo/00005.ts'
29
+ }
30
+ ],
31
+ targetDuration: 10,
32
+ endList: true,
33
+ discontinuitySequence: 0,
34
+ discontinuityStarts: []
35
+ };
@@ -0,0 +1,14 @@
1
+ #EXTM3U
2
+ #EXT-X-TARGETDURATION:10
3
+ #EXTINF:10,
4
+ /test/ts-files/zencoder/gogo/00001.ts
5
+ #EXTINF:10,
6
+ /test/ts-files/zencoder/gogo/00002.ts
7
+ #EXTINF:10,
8
+ /test/ts-files/zencoder/gogo/00003.ts
9
+ #EXT-X-ENDLIST
10
+ #EXTINF:10,
11
+ /test/ts-files/zencoder/gogo/00004.ts
12
+ #EXTINF:10,
13
+ /test/ts-files/zencoder/gogo/00005.ts
14
+
@@ -0,0 +1,15 @@
1
+ module.exports = {
2
+ allowCache: true,
3
+ mediaSequence: 0,
4
+ segments: [
5
+ {
6
+ duration: 10,
7
+ timeline: 0,
8
+ uri: '/test/ts-files/zencoder/gogo/00001.ts'
9
+ }
10
+ ],
11
+ targetDuration: 10,
12
+ endList: true,
13
+ discontinuitySequence: 0,
14
+ discontinuityStarts: []
15
+ };
@@ -0,0 +1,4 @@
1
+ #EXT-X-TARGETDURATION:10
2
+ #EXTINF:10,
3
+ /test/ts-files/zencoder/gogo/00001.ts
4
+ #EXT-X-ENDLIST
@@ -0,0 +1,465 @@
1
+ module.exports = {
2
+ allowCache: true,
3
+ discontinuityStarts: [],
4
+ mediaGroups: {
5
+ 'AUDIO': {
6
+ aud1: {
7
+ English: {
8
+ autoselect: true,
9
+ default: true,
10
+ language: 'eng',
11
+ uri: 'a1/prog_index.m3u8'
12
+ }
13
+ },
14
+ aud2: {
15
+ English: {
16
+ autoselect: true,
17
+ default: true,
18
+ language: 'eng',
19
+ uri: 'a2/prog_index.m3u8'
20
+ }
21
+ },
22
+ aud3: {
23
+ English: {
24
+ autoselect: true,
25
+ default: true,
26
+ language: 'eng',
27
+ uri: 'a3/prog_index.m3u8'
28
+ }
29
+ }
30
+ },
31
+ 'VIDEO': {},
32
+ 'CLOSED-CAPTIONS': {
33
+ cc1: {
34
+ English: {
35
+ autoselect: true,
36
+ default: true,
37
+ language: 'eng',
38
+ instreamId: 'CC1'
39
+ }
40
+ }
41
+ },
42
+ 'SUBTITLES': {
43
+ sub1: {
44
+ English: {
45
+ autoselect: true,
46
+ default: true,
47
+ language: 'eng',
48
+ uri: 's1/eng/prog_index.m3u8',
49
+ forced: false
50
+ }
51
+ }
52
+ }
53
+ },
54
+ playlists: [{
55
+ attributes: {
56
+ 'AVERAGE-BANDWIDTH': '2165224',
57
+ 'BANDWIDTH': 2215219,
58
+ 'CODECS': 'avc1.640020,mp4a.40.2',
59
+ 'RESOLUTION': {
60
+ width: 960,
61
+ height: 540
62
+ },
63
+ 'FRAME-RATE': '59.940',
64
+ 'CLOSED-CAPTIONS': 'cc1',
65
+ 'AUDIO': 'aud1',
66
+ 'SUBTITLES': 'sub1'
67
+ },
68
+ timeline: 0,
69
+ uri: 'v4/prog_index.m3u8'
70
+ },
71
+
72
+ {
73
+ attributes: {
74
+ 'AUDIO': 'aud1',
75
+ 'AVERAGE-BANDWIDTH': '7962844',
76
+ 'BANDWIDTH': 7976430,
77
+ 'CLOSED-CAPTIONS': 'cc1',
78
+ 'CODECS': 'avc1.64002a,mp4a.40.2',
79
+ 'FRAME-RATE': '59.940',
80
+ 'RESOLUTION': {
81
+ height: 1080,
82
+ width: 1920
83
+ },
84
+ 'SUBTITLES': 'sub1'
85
+ },
86
+ timeline: 0,
87
+ uri: 'v8/prog_index.m3u8'
88
+ },
89
+ {
90
+ attributes: {
91
+ 'AUDIO': 'aud1',
92
+ 'AVERAGE-BANDWIDTH': '6165024',
93
+ 'BANDWIDTH': 6181885,
94
+ 'CLOSED-CAPTIONS': 'cc1',
95
+ 'CODECS': 'avc1.64002a,mp4a.40.2',
96
+ 'FRAME-RATE': '59.940',
97
+ 'RESOLUTION': {
98
+ height: 1080,
99
+ width: 1920
100
+ },
101
+ 'SUBTITLES': 'sub1'
102
+ },
103
+ timeline: 0,
104
+ uri: 'v7/prog_index.m3u8'
105
+ },
106
+ {
107
+ attributes: {
108
+ 'AUDIO': 'aud1',
109
+ 'AVERAGE-BANDWIDTH': '4664459',
110
+ 'BANDWIDTH': 4682666,
111
+ 'CLOSED-CAPTIONS': 'cc1',
112
+ 'CODECS': 'avc1.64002a,mp4a.40.2',
113
+ 'FRAME-RATE': '59.940',
114
+ 'RESOLUTION': {
115
+ height: 1080,
116
+ width: 1920
117
+ },
118
+ 'SUBTITLES': 'sub1'
119
+ },
120
+ timeline: 0,
121
+ uri: 'v6/prog_index.m3u8'
122
+ },
123
+ {
124
+ attributes: {
125
+ 'AUDIO': 'aud1',
126
+ 'AVERAGE-BANDWIDTH': '3164759',
127
+ 'BANDWIDTH': 3170746,
128
+ 'CLOSED-CAPTIONS': 'cc1',
129
+ 'CODECS': 'avc1.640020,mp4a.40.2',
130
+ 'FRAME-RATE': '59.940',
131
+ 'RESOLUTION': {
132
+ height: 720,
133
+ width: 1280
134
+ },
135
+ 'SUBTITLES': 'sub1'
136
+ },
137
+ timeline: 0,
138
+ uri: 'v5/prog_index.m3u8'
139
+ },
140
+ {
141
+ attributes: {
142
+ 'AUDIO': 'aud1',
143
+ 'AVERAGE-BANDWIDTH': '1262552',
144
+ 'BANDWIDTH': 1276223,
145
+ 'CLOSED-CAPTIONS': 'cc1',
146
+ 'CODECS': 'avc1.64001e,mp4a.40.2',
147
+ 'FRAME-RATE': '29.970',
148
+ 'RESOLUTION': {
149
+ height: 432,
150
+ width: 768
151
+ },
152
+ 'SUBTITLES': 'sub1'
153
+ },
154
+ timeline: 0,
155
+ uri: 'v3/prog_index.m3u8'
156
+ },
157
+ {
158
+ attributes: {
159
+ 'AUDIO': 'aud1',
160
+ 'AVERAGE-BANDWIDTH': '893243',
161
+ 'BANDWIDTH': 904744,
162
+ 'CLOSED-CAPTIONS': 'cc1',
163
+ 'CODECS': 'avc1.64001e,mp4a.40.2',
164
+ 'FRAME-RATE': '29.970',
165
+ 'RESOLUTION': {
166
+ height: 360,
167
+ width: 640
168
+ },
169
+ 'SUBTITLES': 'sub1'
170
+ },
171
+ timeline: 0,
172
+ uri: 'v2/prog_index.m3u8'
173
+ },
174
+ {
175
+ attributes: {
176
+ 'AUDIO': 'aud1',
177
+ 'AVERAGE-BANDWIDTH': '527673',
178
+ 'BANDWIDTH': 538201,
179
+ 'CLOSED-CAPTIONS': 'cc1',
180
+ 'CODECS': 'avc1.640015,mp4a.40.2',
181
+ 'FRAME-RATE': '29.970',
182
+ 'RESOLUTION': {
183
+ height: 270,
184
+ width: 480
185
+ },
186
+ 'SUBTITLES': 'sub1'
187
+ },
188
+ timeline: 0,
189
+ uri: 'v1/prog_index.m3u8'
190
+ },
191
+ {
192
+ attributes: {
193
+ 'AUDIO': 'aud2',
194
+ 'AVERAGE-BANDWIDTH': '2390334',
195
+ 'BANDWIDTH': 2440329,
196
+ 'CLOSED-CAPTIONS': 'cc1',
197
+ 'CODECS': 'avc1.640020,ac-3',
198
+ 'FRAME-RATE': '59.940',
199
+ 'RESOLUTION': {
200
+ height: 540,
201
+ width: 960
202
+ },
203
+ 'SUBTITLES': 'sub1'
204
+ },
205
+ timeline: 0,
206
+ uri: 'v4/prog_index.m3u8'
207
+ },
208
+ {
209
+ attributes: {
210
+ 'AUDIO': 'aud2',
211
+ 'AVERAGE-BANDWIDTH': '8187954',
212
+ 'BANDWIDTH': 8201540,
213
+ 'CLOSED-CAPTIONS': 'cc1',
214
+ 'CODECS': 'avc1.64002a,ac-3',
215
+ 'FRAME-RATE': '59.940',
216
+ 'RESOLUTION': {
217
+ height: 1080,
218
+ width: 1920
219
+ },
220
+ 'SUBTITLES': 'sub1'
221
+ },
222
+ timeline: 0,
223
+ uri: 'v8/prog_index.m3u8'
224
+ },
225
+ {
226
+ attributes: {
227
+ 'AUDIO': 'aud2',
228
+ 'AVERAGE-BANDWIDTH': '6390134',
229
+ 'BANDWIDTH': 6406995,
230
+ 'CLOSED-CAPTIONS': 'cc1',
231
+ 'CODECS': 'avc1.64002a,ac-3',
232
+ 'FRAME-RATE': '59.940',
233
+ 'RESOLUTION': {
234
+ height: 1080,
235
+ width: 1920
236
+ },
237
+ 'SUBTITLES': 'sub1'
238
+ },
239
+ timeline: 0,
240
+ uri: 'v7/prog_index.m3u8'
241
+ },
242
+ {
243
+ attributes: {
244
+ 'AUDIO': 'aud2',
245
+ 'AVERAGE-BANDWIDTH': '4889569',
246
+ 'BANDWIDTH': 4907776,
247
+ 'CLOSED-CAPTIONS': 'cc1',
248
+ 'CODECS': 'avc1.64002a,ac-3',
249
+ 'FRAME-RATE': '59.940',
250
+ 'RESOLUTION': {
251
+ height: 1080,
252
+ width: 1920
253
+ },
254
+ 'SUBTITLES': 'sub1'
255
+ },
256
+ timeline: 0,
257
+ uri: 'v6/prog_index.m3u8'
258
+ },
259
+ {
260
+ attributes: {
261
+ 'AUDIO': 'aud2',
262
+ 'AVERAGE-BANDWIDTH': '3389869',
263
+ 'BANDWIDTH': 3395856,
264
+ 'CLOSED-CAPTIONS': 'cc1',
265
+ 'CODECS': 'avc1.640020,ac-3',
266
+ 'FRAME-RATE': '59.940',
267
+ 'RESOLUTION': {
268
+ height: 720,
269
+ width: 1280
270
+ },
271
+ 'SUBTITLES': 'sub1'
272
+ },
273
+ timeline: 0,
274
+ uri: 'v5/prog_index.m3u8'
275
+ },
276
+ {
277
+ attributes: {
278
+ 'AUDIO': 'aud2',
279
+ 'AVERAGE-BANDWIDTH': '1487662',
280
+ 'BANDWIDTH': 1501333,
281
+ 'CLOSED-CAPTIONS': 'cc1',
282
+ 'CODECS': 'avc1.64001e,ac-3',
283
+ 'FRAME-RATE': '29.970',
284
+ 'RESOLUTION': {
285
+ height: 432,
286
+ width: 768
287
+ },
288
+ 'SUBTITLES': 'sub1'
289
+ },
290
+ timeline: 0,
291
+ uri: 'v3/prog_index.m3u8'
292
+ },
293
+ {
294
+ attributes: {
295
+ 'AUDIO': 'aud2',
296
+ 'AVERAGE-BANDWIDTH': '1118353',
297
+ 'BANDWIDTH': 1129854,
298
+ 'CLOSED-CAPTIONS': 'cc1',
299
+ 'CODECS': 'avc1.64001e,ac-3',
300
+ 'FRAME-RATE': '29.970',
301
+ 'RESOLUTION': {
302
+ height: 360,
303
+ width: 640
304
+ },
305
+ 'SUBTITLES': 'sub1'
306
+ },
307
+ timeline: 0,
308
+ uri: 'v2/prog_index.m3u8'
309
+ },
310
+ {
311
+ attributes: {
312
+ 'AUDIO': 'aud2',
313
+ 'AVERAGE-BANDWIDTH': '752783',
314
+ 'BANDWIDTH': 763311,
315
+ 'CLOSED-CAPTIONS': 'cc1',
316
+ 'CODECS': 'avc1.640015,ac-3',
317
+ 'FRAME-RATE': '29.970',
318
+ 'RESOLUTION': {
319
+ height: 270,
320
+ width: 480
321
+ },
322
+ 'SUBTITLES': 'sub1'
323
+ },
324
+ timeline: 0,
325
+ uri: 'v1/prog_index.m3u8'
326
+ },
327
+ {
328
+ attributes: {
329
+ 'AUDIO': 'aud3',
330
+ 'AVERAGE-BANDWIDTH': '2198334',
331
+ 'BANDWIDTH': 2248329,
332
+ 'CLOSED-CAPTIONS': 'cc1',
333
+ 'CODECS': 'avc1.640020,ec-3',
334
+ 'FRAME-RATE': '59.940',
335
+ 'RESOLUTION': {
336
+ height: 540,
337
+ width: 960
338
+ },
339
+ 'SUBTITLES': 'sub1'
340
+ },
341
+ timeline: 0,
342
+ uri: 'v4/prog_index.m3u8'
343
+ },
344
+ {
345
+ attributes: {
346
+ 'AUDIO': 'aud3',
347
+ 'AVERAGE-BANDWIDTH': '7995954',
348
+ 'BANDWIDTH': 8009540,
349
+ 'CLOSED-CAPTIONS': 'cc1',
350
+ 'CODECS': 'avc1.64002a,ec-3',
351
+ 'FRAME-RATE': '59.940',
352
+ 'RESOLUTION': {
353
+ height: 1080,
354
+ width: 1920
355
+ },
356
+ 'SUBTITLES': 'sub1'
357
+ },
358
+ timeline: 0,
359
+ uri: 'v8/prog_index.m3u8'
360
+ },
361
+ {
362
+ attributes: {
363
+ 'AUDIO': 'aud3',
364
+ 'AVERAGE-BANDWIDTH': '6198134',
365
+ 'BANDWIDTH': 6214995,
366
+ 'CLOSED-CAPTIONS': 'cc1',
367
+ 'CODECS': 'avc1.64002a,ec-3',
368
+ 'FRAME-RATE': '59.940',
369
+ 'RESOLUTION': {
370
+ height: 1080,
371
+ width: 1920
372
+ },
373
+ 'SUBTITLES': 'sub1'
374
+ },
375
+ timeline: 0,
376
+ uri: 'v7/prog_index.m3u8'
377
+ },
378
+ {
379
+ attributes: {
380
+ 'AUDIO': 'aud3',
381
+ 'AVERAGE-BANDWIDTH': '4697569',
382
+ 'BANDWIDTH': 4715776,
383
+ 'CLOSED-CAPTIONS': 'cc1',
384
+ 'CODECS': 'avc1.64002a,ec-3',
385
+ 'FRAME-RATE': '59.940',
386
+ 'RESOLUTION': {
387
+ height: 1080,
388
+ width: 1920
389
+ },
390
+ 'SUBTITLES': 'sub1'
391
+ },
392
+ timeline: 0,
393
+ uri: 'v6/prog_index.m3u8'
394
+ },
395
+ {
396
+ attributes: {
397
+ 'AUDIO': 'aud3',
398
+ 'AVERAGE-BANDWIDTH': '3197869',
399
+ 'BANDWIDTH': 3203856,
400
+ 'CLOSED-CAPTIONS': 'cc1',
401
+ 'CODECS': 'avc1.640020,ec-3',
402
+ 'FRAME-RATE': '59.940',
403
+ 'RESOLUTION': {
404
+ height: 720,
405
+ width: 1280
406
+ },
407
+ 'SUBTITLES': 'sub1'
408
+ },
409
+ timeline: 0,
410
+ uri: 'v5/prog_index.m3u8'
411
+ },
412
+ {
413
+ attributes: {
414
+ 'AUDIO': 'aud3',
415
+ 'AVERAGE-BANDWIDTH': '1295662',
416
+ 'BANDWIDTH': 1309333,
417
+ 'CLOSED-CAPTIONS': 'cc1',
418
+ 'CODECS': 'avc1.64001e,ec-3',
419
+ 'FRAME-RATE': '29.970',
420
+ 'RESOLUTION': {
421
+ height: 432,
422
+ width: 768
423
+ },
424
+ 'SUBTITLES': 'sub1'
425
+ },
426
+ timeline: 0,
427
+ uri: 'v3/prog_index.m3u8'
428
+ },
429
+ {
430
+ attributes: {
431
+ 'AUDIO': 'aud3',
432
+ 'AVERAGE-BANDWIDTH': '926353',
433
+ 'BANDWIDTH': 937854,
434
+ 'CLOSED-CAPTIONS': 'cc1',
435
+ 'CODECS': 'avc1.64001e,ec-3',
436
+ 'FRAME-RATE': '29.970',
437
+ 'RESOLUTION': {
438
+ height: 360,
439
+ width: 640
440
+ },
441
+ 'SUBTITLES': 'sub1'
442
+ },
443
+ timeline: 0,
444
+ uri: 'v2/prog_index.m3u8'
445
+ },
446
+ {
447
+ attributes: {
448
+ 'AUDIO': 'aud3',
449
+ 'AVERAGE-BANDWIDTH': '560783',
450
+ 'BANDWIDTH': 571311,
451
+ 'CLOSED-CAPTIONS': 'cc1',
452
+ 'CODECS': 'avc1.640015,ec-3',
453
+ 'FRAME-RATE': '29.970',
454
+ 'RESOLUTION': {
455
+ height: 270,
456
+ width: 480
457
+ },
458
+ 'SUBTITLES': 'sub1'
459
+ },
460
+ timeline: 0,
461
+ uri: 'v1/prog_index.m3u8'
462
+ }],
463
+ segments: [],
464
+ version: 6
465
+ };
@@ -0,0 +1,76 @@
1
+ #EXTM3U
2
+ #EXT-X-VERSION:6
3
+ #EXT-X-INDEPENDENT-SEGMENTS
4
+
5
+
6
+ #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud1",LANGUAGE="eng",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="a1/prog_index.m3u8"
7
+ #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud2",LANGUAGE="eng",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="a2/prog_index.m3u8"
8
+ #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud3",LANGUAGE="eng",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="a3/prog_index.m3u8"
9
+
10
+
11
+ #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub1",NAME="English",LANGUAGE="eng",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,URI="s1/eng/prog_index.m3u8"
12
+
13
+
14
+ #EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS,GROUP-ID="cc1",NAME="English",LANGUAGE="eng",DEFAULT=YES,AUTOSELECT=YES,INSTREAM-ID="CC1"
15
+
16
+
17
+ #EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=163198,BANDWIDTH=166942,CODECS="avc1.64002a",RESOLUTION=1920x1080,URI="v6/iframe_index.m3u8"
18
+ #EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=131314,BANDWIDTH=139041,CODECS="avc1.640020",RESOLUTION=1280x720,URI="v5/iframe_index.m3u8"
19
+ #EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=100233,BANDWIDTH=101724,CODECS="avc1.640020",RESOLUTION=960x540,URI="v4/iframe_index.m3u8"
20
+ #EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=81002,BANDWIDTH=84112,CODECS="avc1.64001e",RESOLUTION=768x432,URI="v3/iframe_index.m3u8"
21
+ #EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=64987,BANDWIDTH=65835,CODECS="avc1.64001e",RESOLUTION=640x360,URI="v2/iframe_index.m3u8"
22
+ #EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=41547,BANDWIDTH=42106,CODECS="avc1.640015",RESOLUTION=480x270,URI="v1/iframe_index.m3u8"
23
+
24
+
25
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2165224,BANDWIDTH=2215219,CODECS="avc1.640020,mp4a.40.2",RESOLUTION=960x540,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"
26
+ v4/prog_index.m3u8
27
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=7962844,BANDWIDTH=7976430,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"
28
+ v8/prog_index.m3u8
29
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6165024,BANDWIDTH=6181885,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"
30
+ v7/prog_index.m3u8
31
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4664459,BANDWIDTH=4682666,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"
32
+ v6/prog_index.m3u8
33
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3164759,BANDWIDTH=3170746,CODECS="avc1.640020,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"
34
+ v5/prog_index.m3u8
35
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1262552,BANDWIDTH=1276223,CODECS="avc1.64001e,mp4a.40.2",RESOLUTION=768x432,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"
36
+ v3/prog_index.m3u8
37
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=893243,BANDWIDTH=904744,CODECS="avc1.64001e,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"
38
+ v2/prog_index.m3u8
39
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=527673,BANDWIDTH=538201,CODECS="avc1.640015,mp4a.40.2",RESOLUTION=480x270,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"
40
+ v1/prog_index.m3u8
41
+
42
+
43
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2390334,BANDWIDTH=2440329,CODECS="avc1.640020,ac-3",RESOLUTION=960x540,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"
44
+ v4/prog_index.m3u8
45
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=8187954,BANDWIDTH=8201540,CODECS="avc1.64002a,ac-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"
46
+ v8/prog_index.m3u8
47
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6390134,BANDWIDTH=6406995,CODECS="avc1.64002a,ac-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"
48
+ v7/prog_index.m3u8
49
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4889569,BANDWIDTH=4907776,CODECS="avc1.64002a,ac-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"
50
+ v6/prog_index.m3u8
51
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3389869,BANDWIDTH=3395856,CODECS="avc1.640020,ac-3",RESOLUTION=1280x720,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"
52
+ v5/prog_index.m3u8
53
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1487662,BANDWIDTH=1501333,CODECS="avc1.64001e,ac-3",RESOLUTION=768x432,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"
54
+ v3/prog_index.m3u8
55
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1118353,BANDWIDTH=1129854,CODECS="avc1.64001e,ac-3",RESOLUTION=640x360,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"
56
+ v2/prog_index.m3u8
57
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=752783,BANDWIDTH=763311,CODECS="avc1.640015,ac-3",RESOLUTION=480x270,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"
58
+ v1/prog_index.m3u8
59
+
60
+
61
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2198334,BANDWIDTH=2248329,CODECS="avc1.640020,ec-3",RESOLUTION=960x540,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"
62
+ v4/prog_index.m3u8
63
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=7995954,BANDWIDTH=8009540,CODECS="avc1.64002a,ec-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"
64
+ v8/prog_index.m3u8
65
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6198134,BANDWIDTH=6214995,CODECS="avc1.64002a,ec-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"
66
+ v7/prog_index.m3u8
67
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4697569,BANDWIDTH=4715776,CODECS="avc1.64002a,ec-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"
68
+ v6/prog_index.m3u8
69
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3197869,BANDWIDTH=3203856,CODECS="avc1.640020,ec-3",RESOLUTION=1280x720,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"
70
+ v5/prog_index.m3u8
71
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1295662,BANDWIDTH=1309333,CODECS="avc1.64001e,ec-3",RESOLUTION=768x432,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"
72
+ v3/prog_index.m3u8
73
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=926353,BANDWIDTH=937854,CODECS="avc1.64001e,ec-3",RESOLUTION=640x360,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"
74
+ v2/prog_index.m3u8
75
+ #EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=560783,BANDWIDTH=571311,CODECS="avc1.640015,ec-3",RESOLUTION=480x270,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"
76
+ v1/prog_index.m3u8
@@ -0,0 +1,57 @@
1
+ module.exports = {
2
+ allowCache: true,
3
+ playlists: [
4
+ {
5
+ attributes: {
6
+ 'PROGRAM-ID': 1,
7
+ 'BANDWIDTH': 240000,
8
+ 'RESOLUTION': {
9
+ width: 396,
10
+ height: 224
11
+ }
12
+ },
13
+ timeline: 0,
14
+ uri: 'media.m3u8'
15
+ },
16
+ {
17
+ attributes: {
18
+ 'PROGRAM-ID': 1,
19
+ 'BANDWIDTH': 40000
20
+ },
21
+ timeline: 0,
22
+ uri: 'media1.m3u8'
23
+ },
24
+ {
25
+ attributes: {
26
+ 'PROGRAM-ID': 1,
27
+ 'BANDWIDTH': 440000,
28
+ 'RESOLUTION': {
29
+ width: 396,
30
+ height: 224
31
+ }
32
+ },
33
+ timeline: 0,
34
+ uri: 'media2.m3u8'
35
+ },
36
+ {
37
+ attributes: {
38
+ 'PROGRAM-ID': 1,
39
+ 'BANDWIDTH': 1928000,
40
+ 'RESOLUTION': {
41
+ width: 960,
42
+ height: 540
43
+ }
44
+ },
45
+ timeline: 0,
46
+ uri: 'media3.m3u8'
47
+ }
48
+ ],
49
+ discontinuityStarts: [],
50
+ mediaGroups: {
51
+ 'VIDEO': {},
52
+ 'AUDIO': {},
53
+ 'CLOSED-CAPTIONS': {},
54
+ 'SUBTITLES': {}
55
+ },
56
+ segments: []
57
+ };
@@ -0,0 +1,10 @@
1
+ # A simple master playlist with multiple variant streams
2
+ #EXTM3U
3
+ #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=240000,RESOLUTION=396x224
4
+ media.m3u8
5
+ #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=40000
6
+ media1.m3u8
7
+ #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=440000,RESOLUTION=396x224
8
+ media2.m3u8
9
+ #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1928000,RESOLUTION=960x540
10
+ media3.m3u8