@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,149 @@
1
+ module.exports = {
2
+ allowCache: true,
3
+ discontinuitySequence: 0,
4
+ discontinuityStarts: [],
5
+ mediaSequence: 0,
6
+ playlistType: 'VOD',
7
+ preloadSegment: {
8
+ parts: [
9
+ {
10
+ duration: 0.33334,
11
+ uri: 'hls_450k_video.ts',
12
+ byterange: {
13
+ length: 22444,
14
+ offset: 0
15
+ }
16
+ }
17
+ ],
18
+ preloadHints: [
19
+ {
20
+ type: 'PART',
21
+ uri: 'filePart273.1.mp4',
22
+ byterange: {
23
+ length: 2000,
24
+ offset: 22444
25
+ }
26
+ },
27
+ {
28
+ type: 'MAP',
29
+ uri: 'file-init.mp4',
30
+ byterange: {
31
+ length: 5000,
32
+ offset: 8377660
33
+ }
34
+ },
35
+ {
36
+ type: 'FOO',
37
+ uri: 'foo.mp4',
38
+ byterange: {
39
+ length: 5000,
40
+ offset: 0
41
+ }
42
+ }
43
+ ],
44
+ timeline: 0
45
+ },
46
+ segments: [
47
+ {
48
+ byterange: {
49
+ length: 468684,
50
+ offset: 7108092
51
+ },
52
+ duration: 10,
53
+ timeline: 0,
54
+ uri: 'hls_450k_video.ts'
55
+ },
56
+ {
57
+ byterange: {
58
+ length: 444996,
59
+ offset: 7576776
60
+ },
61
+ duration: 10,
62
+ timeline: 0,
63
+ uri: 'hls_450k_video.ts'
64
+ },
65
+ {
66
+ byterange: {
67
+ length: 331444,
68
+ offset: 8021772
69
+ },
70
+ duration: 10,
71
+ parts: [
72
+ {
73
+ duration: 0.33334,
74
+ uri: 'hls_450k_video.ts',
75
+ byterange: {
76
+ length: 45553,
77
+ offset: 0
78
+ }
79
+ },
80
+ {
81
+ duration: 0.33334,
82
+ uri: 'hls_450k_video.ts',
83
+ byterange: {
84
+ length: 28823,
85
+ offset: 7622329
86
+ }
87
+ },
88
+ {
89
+ duration: 0.33334,
90
+ uri: 'hls_450k_video.ts',
91
+ byterange: {
92
+ length: 22444,
93
+ offset: 7651152
94
+ }
95
+ },
96
+ {
97
+ duration: 0.33334,
98
+ uri: 'hls_450k_video.ts',
99
+ byterange: {
100
+ length: 22444,
101
+ offset: 7673596
102
+ }
103
+ }
104
+ ],
105
+ timeline: 0,
106
+ uri: 'hls_450k_video.ts'
107
+ },
108
+ {
109
+ byterange: {
110
+ length: 44556,
111
+ offset: 8353216
112
+ },
113
+ duration: 1.4167,
114
+ parts: [
115
+ {
116
+ duration: 0.33334,
117
+ uri: 'hls_450k_video.ts',
118
+ byterange: {
119
+ length: 45553,
120
+ offset: 8021772
121
+ }
122
+ },
123
+ {
124
+ duration: 0.33334,
125
+ uri: 'hls_450k_video.ts',
126
+ byterange: {
127
+ length: 28823,
128
+ offset: 8067325
129
+ }
130
+ },
131
+ {
132
+ duration: 0.33334,
133
+ uri: 'hls_450k_video.ts',
134
+ byterange: {
135
+ length: 22444,
136
+ offset: 8096148
137
+ }
138
+ }
139
+ ],
140
+ timeline: 0,
141
+ uri: 'hls_450k_video.ts'
142
+ }
143
+ ],
144
+ skip: {
145
+ skippedSegments: 3
146
+ },
147
+ targetDuration: 10,
148
+ version: 3
149
+ };
@@ -0,0 +1,30 @@
1
+ #EXTM3U
2
+ #EXT-X-TARGETDURATION:10
3
+ #EXT-X-VERSION:3
4
+ #EXT-X-MEDIA-SEQUENCE:0
5
+ #EXT-X-PLAYLIST-TYPE:VOD
6
+ #EXTINF:10,
7
+ #EXT-X-SKIP:SKIPPED-SEGMENTS=3
8
+ #EXTINF:10,
9
+ #EXT-X-BYTERANGE:468684@7108092
10
+ hls_450k_video.ts
11
+ #EXTINF:10,
12
+ #EXT-X-BYTERANGE:444996@7576776
13
+ hls_450k_video.ts
14
+ #EXT-X-PART:DURATION=0.33334,URI="hls_450k_video.ts",BYTERANGE=45553
15
+ #EXT-X-PART:DURATION=0.33334,URI="hls_450k_video.ts",BYTERANGE=28823@7622329
16
+ #EXT-X-PART:DURATION=0.33334,URI="hls_450k_video.ts",BYTERANGE=22444
17
+ #EXT-X-PART:DURATION=0.33334,URI="hls_450k_video.ts",BYTERANGE=22444
18
+ #EXTINF:10,
19
+ #EXT-X-BYTERANGE:331444@8021772
20
+ hls_450k_video.ts
21
+ #EXT-X-PART:DURATION=0.33334,URI="hls_450k_video.ts",BYTERANGE=45553@8021772
22
+ #EXT-X-PART:DURATION=0.33334,URI="hls_450k_video.ts",BYTERANGE=28823
23
+ #EXT-X-PART:DURATION=0.33334,URI="hls_450k_video.ts",BYTERANGE=22444
24
+ #EXTINF:1.4167,
25
+ #EXT-X-BYTERANGE:44556@8353216
26
+ hls_450k_video.ts
27
+ #EXT-X-PART:DURATION=0.33334,URI="hls_450k_video.ts",BYTERANGE=22444
28
+ #EXT-X-PRELOAD-HINT:TYPE=PART,URI="filePart273.1.mp4",BYTERANGE-LENGTH=2000
29
+ #EXT-X-PRELOAD-HINT:TYPE=MAP,URI="file-init.mp4",BYTERANGE-LENGTH=5000,BYTERANGE-START=8377660
30
+ #EXT-X-PRELOAD-HINT:TYPE=FOO,URI="foo.mp4",BYTERANGE-LENGTH=5000
@@ -0,0 +1,214 @@
1
+ module.exports = {
2
+ allowCache: true,
3
+ dateTimeObject: new Date('2019-02-14T02:13:36.106Z'),
4
+ dateTimeString: '2019-02-14T02:13:36.106Z',
5
+ discontinuitySequence: 0,
6
+ discontinuityStarts: [],
7
+ mediaSequence: 266,
8
+ preloadSegment: {
9
+ map: {uri: 'init.mp4'},
10
+ parts: [
11
+ {
12
+ duration: 0.33334,
13
+ independent: true,
14
+ uri: 'filePart273.0.mp4'
15
+ },
16
+ {
17
+ duration: 0.33334,
18
+ uri: 'filePart273.1.mp4'
19
+ },
20
+ {
21
+ duration: 0.33334,
22
+ uri: 'filePart273.2.mp4'
23
+ }
24
+ ],
25
+ preloadHints: [
26
+ {type: 'PART', uri: 'filePart273.3.mp4'},
27
+ {type: 'MAP', uri: 'file-init.mp4'}
28
+ ],
29
+ timeline: 0
30
+ },
31
+ renditionReports: [
32
+ {lastMsn: 273, lastPart: 2, uri: '../1M/waitForMSN.php'},
33
+ {lastMsn: 273, lastPart: 1, uri: '../4M/waitForMSN.php'}
34
+ ],
35
+ partInf: {
36
+ partTarget: 0.33334
37
+ },
38
+ partTargetDuration: 0.33334,
39
+ segments: [
40
+ {
41
+ dateTimeObject: new Date('2019-02-14T02:13:36.106Z'),
42
+ dateTimeString: '2019-02-14T02:13:36.106Z',
43
+ duration: 4.00008,
44
+ map: {
45
+ uri: 'init.mp4'
46
+ },
47
+ timeline: 0,
48
+ uri: 'fileSequence266.mp4'
49
+ },
50
+ {
51
+ duration: 4.00008,
52
+ map: {
53
+ uri: 'init.mp4'
54
+ },
55
+ timeline: 0,
56
+ uri: 'fileSequence267.mp4'
57
+ },
58
+ {
59
+ duration: 4.00008,
60
+ map: {
61
+ uri: 'init.mp4'
62
+ },
63
+ timeline: 0,
64
+ uri: 'fileSequence268.mp4'
65
+ },
66
+ {
67
+ duration: 4.00008,
68
+ map: {
69
+ uri: 'init.mp4'
70
+ },
71
+ timeline: 0,
72
+ uri: 'fileSequence269.mp4'
73
+ },
74
+ {
75
+ duration: 4.00008,
76
+ map: {
77
+ uri: 'init.mp4'
78
+ },
79
+ timeline: 0,
80
+ uri: 'fileSequence270.mp4'
81
+ },
82
+ {
83
+ duration: 4.00008,
84
+ map: {
85
+ uri: 'init.mp4'
86
+ },
87
+ timeline: 0,
88
+ uri: 'fileSequence271.mp4',
89
+ parts: [
90
+ {
91
+ duration: 0.33334,
92
+ uri: 'filePart271.0.mp4'
93
+ },
94
+ {
95
+ duration: 0.33334,
96
+ uri: 'filePart271.1.mp4'
97
+ },
98
+ {
99
+ duration: 0.33334,
100
+ uri: 'filePart271.2.mp4'
101
+ },
102
+ {
103
+ duration: 0.33334,
104
+ uri: 'filePart271.3.mp4'
105
+ },
106
+ {
107
+ duration: 0.33334,
108
+ independent: true,
109
+ uri: 'filePart271.4.mp4'
110
+ },
111
+ {
112
+ duration: 0.33334,
113
+ uri: 'filePart271.5.mp4'
114
+ },
115
+ {
116
+ duration: 0.33334,
117
+ uri: 'filePart271.6.mp4'
118
+ },
119
+ {
120
+ duration: 0.33334,
121
+ uri: 'filePart271.7.mp4'
122
+ },
123
+ {
124
+ duration: 0.33334,
125
+ independent: true,
126
+ uri: 'filePart271.8.mp4'
127
+ },
128
+ {
129
+ duration: 0.33334,
130
+ uri: 'filePart271.9.mp4'
131
+ },
132
+ {
133
+ duration: 0.33334,
134
+ uri: 'filePart271.10.mp4'
135
+ },
136
+ {
137
+ duration: 0.33334,
138
+ uri: 'filePart271.11.mp4'
139
+ }
140
+ ]
141
+ },
142
+ {
143
+ dateTimeObject: new Date('2019-02-14T02:14:00.106Z'),
144
+ dateTimeString: '2019-02-14T02:14:00.106Z',
145
+ duration: 4.00008,
146
+ map: {
147
+ uri: 'init.mp4'
148
+ },
149
+ timeline: 0,
150
+ uri: 'fileSequence272.mp4',
151
+ parts: [
152
+ {
153
+ duration: 0.33334,
154
+ gap: true,
155
+ uri: 'filePart272.a.mp4'
156
+ },
157
+ {
158
+ duration: 0.33334,
159
+ uri: 'filePart272.b.mp4'
160
+ },
161
+ {
162
+ duration: 0.33334,
163
+ uri: 'filePart272.c.mp4'
164
+ },
165
+ {
166
+ duration: 0.33334,
167
+ uri: 'filePart272.d.mp4'
168
+ },
169
+ {
170
+ duration: 0.33334,
171
+ uri: 'filePart272.e.mp4'
172
+ },
173
+ {
174
+ duration: 0.33334,
175
+ independent: true,
176
+ uri: 'filePart272.f.mp4'
177
+ },
178
+ {
179
+ duration: 0.33334,
180
+ uri: 'filePart272.g.mp4'
181
+ },
182
+ {
183
+ duration: 0.33334,
184
+ uri: 'filePart272.h.mp4'
185
+ },
186
+ {
187
+ duration: 0.33334,
188
+ uri: 'filePart272.i.mp4'
189
+ },
190
+ {
191
+ duration: 0.33334,
192
+ uri: 'filePart272.j.mp4'
193
+ },
194
+ {
195
+ duration: 0.33334,
196
+ uri: 'filePart272.k.mp4'
197
+ },
198
+ {
199
+ duration: 0.33334,
200
+ uri: 'filePart272.l.mp4'
201
+ }
202
+ ]
203
+ }
204
+ ],
205
+ serverControl: {
206
+ canSkipDateranges: true,
207
+ canBlockReload: true,
208
+ canSkipUntil: 12,
209
+ partHoldBack: 1,
210
+ holdBack: 12
211
+ },
212
+ targetDuration: 4,
213
+ version: 6
214
+ };
@@ -0,0 +1,56 @@
1
+ #EXTM3U
2
+ # This Playlist is a response to: GET https://example.com/2M/waitForMSN.php?_HLS_msn=273&_HLS_part=2
3
+ #EXT-X-TARGETDURATION:4
4
+ #EXT-X-VERSION:6
5
+ #EXT-X-SERVER-CONTROL:CAN-BLOCK-RELOAD=YES,CAN-SKIP-DATERANGES=YES,PART-HOLD-BACK=1.0,CAN-SKIP-UNTIL=12.0,HOLD-BACK=12.0
6
+ #EXT-X-PART-INF:PART-TARGET=0.33334
7
+ #EXT-X-MEDIA-SEQUENCE:266
8
+ #EXT-X-PROGRAM-DATE-TIME:2019-02-14T02:13:36.106Z
9
+ #EXT-X-MAP:URI="init.mp4"
10
+ #EXTINF:4.00008,
11
+ fileSequence266.mp4
12
+ #EXTINF:4.00008,
13
+ fileSequence267.mp4
14
+ #EXTINF:4.00008,
15
+ fileSequence268.mp4
16
+ #EXTINF:4.00008,
17
+ fileSequence269.mp4
18
+ #EXTINF:4.00008,
19
+ fileSequence270.mp4
20
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.0.mp4"
21
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.1.mp4"
22
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.2.mp4"
23
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.3.mp4"
24
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.4.mp4",INDEPENDENT=YES
25
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.5.mp4"
26
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.6.mp4"
27
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.7.mp4"
28
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.8.mp4",INDEPENDENT=YES
29
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.9.mp4"
30
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.10.mp4"
31
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.11.mp4"
32
+ #EXTINF:4.00008,
33
+ fileSequence271.mp4
34
+ #EXT-X-PROGRAM-DATE-TIME:2019-02-14T02:14:00.106Z
35
+ #EXT-X-PART:GAP=YES,DURATION=0.33334,URI="filePart272.a.mp4"
36
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.b.mp4"
37
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.c.mp4"
38
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.d.mp4"
39
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.e.mp4"
40
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.f.mp4",INDEPENDENT=YES
41
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.g.mp4"
42
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.h.mp4"
43
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.i.mp4"
44
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.j.mp4"
45
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.k.mp4"
46
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.l.mp4"
47
+ #EXTINF:4.00008,
48
+ fileSequence272.mp4
49
+ #EXT-X-PART:DURATION=0.33334,URI="filePart273.0.mp4",INDEPENDENT=YES
50
+ #EXT-X-PART:DURATION=0.33334,URI="filePart273.1.mp4"
51
+ #EXT-X-PART:DURATION=0.33334,URI="filePart273.2.mp4"
52
+ #EXT-X-PRELOAD-HINT:TYPE=PART,URI="filePart273.3.mp4"
53
+ #EXT-X-PRELOAD-HINT:TYPE=MAP,URI="file-init.mp4"
54
+
55
+ #EXT-X-RENDITION-REPORT:URI="../1M/waitForMSN.php",LAST-MSN=273,LAST-PART=2
56
+ #EXT-X-RENDITION-REPORT:URI="../4M/waitForMSN.php",LAST-MSN=273,LAST-PART=1
@@ -0,0 +1,186 @@
1
+ module.exports = {
2
+ allowCache: true,
3
+ dateTimeObject: new Date('2019-02-14T02:14:00.106Z'),
4
+ dateTimeString: '2019-02-14T02:14:00.106Z',
5
+ discontinuitySequence: 0,
6
+ discontinuityStarts: [],
7
+ mediaSequence: 266,
8
+ preloadSegment: {
9
+ timeline: 0,
10
+ preloadHints: [
11
+ {type: 'PART', uri: 'filePart273.4.mp4'},
12
+ {type: 'MAP', uri: 'file-init.mp4'}
13
+ ],
14
+ parts: [
15
+ {
16
+ duration: 0.33334,
17
+ independent: true,
18
+ uri: 'filePart273.0.mp4'
19
+ },
20
+ {
21
+ duration: 0.33334,
22
+ uri: 'filePart273.1.mp4'
23
+ },
24
+ {
25
+ duration: 0.33334,
26
+ uri: 'filePart273.2.mp4'
27
+ },
28
+ {
29
+ duration: 0.33334,
30
+ uri: 'filePart273.3.mp4'
31
+ }
32
+ ]
33
+ },
34
+ renditionReports: [
35
+ {lastMsn: 273, lastPart: 3, uri: '../1M/waitForMSN.php'},
36
+ {lastMsn: 273, lastPart: 3, uri: '../4M/waitForMSN.php'}
37
+ ],
38
+ partInf: {
39
+ partTarget: 0.33334
40
+ },
41
+ partTargetDuration: 0.33334,
42
+ segments: [
43
+ {
44
+ duration: 4.00008,
45
+ timeline: 0,
46
+ uri: 'fileSequence269.mp4'
47
+ },
48
+ {
49
+ duration: 4.00008,
50
+ timeline: 0,
51
+ uri: 'fileSequence270.mp4'
52
+ },
53
+ {
54
+ duration: 4.00008,
55
+ timeline: 0,
56
+ uri: 'fileSequence271.mp4',
57
+ parts: [
58
+ {
59
+ duration: 0.33334,
60
+ uri: 'filePart271.0.mp4'
61
+ },
62
+ {
63
+ duration: 0.33334,
64
+ uri: 'filePart271.1.mp4'
65
+ },
66
+ {
67
+ duration: 0.33334,
68
+ uri: 'filePart271.2.mp4'
69
+ },
70
+ {
71
+ duration: 0.33334,
72
+ uri: 'filePart271.3.mp4'
73
+ },
74
+ {
75
+ duration: 0.33334,
76
+ independent: true,
77
+ uri: 'filePart271.4.mp4'
78
+ },
79
+ {
80
+ duration: 0.33334,
81
+ uri: 'filePart271.5.mp4'
82
+ },
83
+ {
84
+ duration: 0.33334,
85
+ uri: 'filePart271.6.mp4'
86
+ },
87
+ {
88
+ duration: 0.33334,
89
+ uri: 'filePart271.7.mp4'
90
+ },
91
+ {
92
+ duration: 0.33334,
93
+ independent: true,
94
+ uri: 'filePart271.8.mp4'
95
+ },
96
+ {
97
+ duration: 0.33334,
98
+ uri: 'filePart271.9.mp4'
99
+ },
100
+ {
101
+ duration: 0.33334,
102
+ uri: 'filePart271.10.mp4'
103
+ },
104
+ {
105
+ duration: 0.33334,
106
+ uri: 'filePart271.11.mp4'
107
+ }
108
+ ]
109
+ },
110
+ {
111
+ dateTimeObject: new Date('2019-02-14T02:14:00.106Z'),
112
+ dateTimeString: '2019-02-14T02:14:00.106Z',
113
+ duration: 4.00008,
114
+ timeline: 0,
115
+ uri: 'fileSequence272.mp4',
116
+ parts: [
117
+ {
118
+ duration: 0.33334,
119
+ gap: true,
120
+ uri: 'filePart272.a.mp4'
121
+ },
122
+ {
123
+ duration: 0.33334,
124
+ uri: 'filePart272.b.mp4'
125
+ },
126
+ {
127
+ duration: 0.33334,
128
+ uri: 'filePart272.c.mp4'
129
+ },
130
+ {
131
+ duration: 0.33334,
132
+ uri: 'filePart272.d.mp4'
133
+ },
134
+ {
135
+ duration: 0.33334,
136
+ uri: 'filePart272.e.mp4'
137
+ },
138
+ {
139
+ duration: 0.33334,
140
+ independent: true,
141
+ uri: 'filePart272.f.mp4'
142
+ },
143
+ {
144
+ duration: 0.33334,
145
+ uri: 'filePart272.g.mp4'
146
+ },
147
+ {
148
+ duration: 0.33334,
149
+ uri: 'filePart272.h.mp4'
150
+ },
151
+ {
152
+ duration: 0.33334,
153
+ uri: 'filePart272.i.mp4'
154
+ },
155
+ {
156
+ duration: 0.33334,
157
+ uri: 'filePart272.j.mp4'
158
+ },
159
+ {
160
+ duration: 0.33334,
161
+ uri: 'filePart272.k.mp4'
162
+ },
163
+ {
164
+ duration: 0.33334,
165
+ uri: 'filePart272.l.mp4'
166
+ }
167
+ ]
168
+ }
169
+ ],
170
+ skip: {
171
+ skippedSegments: 3,
172
+ recentlyRemovedDateranges: [
173
+ 'foo',
174
+ 'bar'
175
+ ]
176
+ },
177
+ serverControl: {
178
+ canSkipDateranges: true,
179
+ canBlockReload: true,
180
+ canSkipUntil: 12,
181
+ partHoldBack: 1,
182
+ holdBack: 12
183
+ },
184
+ targetDuration: 4,
185
+ version: 9
186
+ };
@@ -0,0 +1,50 @@
1
+ #EXTM3U
2
+ # Following the example above, this Playlist is a response to: GET https://example.com/2M/waitForMSN.php?_HLS_msn=273&_HLS_part=3 &_HLS_skip=YES
3
+ #EXT-X-TARGETDURATION:4
4
+ #EXT-X-VERSION:9
5
+ #EXT-X-SERVER-CONTROL:CAN-BLOCK-RELOAD=YES,CAN-SKIP-DATERANGES=YES,PART-HOLD-BACK=1.0,CAN-SKIP-UNTIL=12.0,HOLD-BACK=12.0
6
+ #EXT-X-PART-INF:PART-TARGET=0.33334
7
+ #EXT-X-MEDIA-SEQUENCE:266
8
+ #EXT-X-SKIP:SKIPPED-SEGMENTS=3,RECENTLY-REMOVED-DATERANGES=foo bar
9
+ #EXTINF:4.00008,
10
+ fileSequence269.mp4
11
+ #EXTINF:4.00008,
12
+ fileSequence270.mp4
13
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.0.mp4"
14
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.1.mp4"
15
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.2.mp4"
16
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.3.mp4"
17
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.4.mp4",INDEPENDENT=YES
18
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.5.mp4"
19
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.6.mp4"
20
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.7.mp4"
21
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.8.mp4",INDEPENDENT=YES
22
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.9.mp4"
23
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.10.mp4"
24
+ #EXT-X-PART:DURATION=0.33334,URI="filePart271.11.mp4"
25
+ #EXTINF:4.00008,
26
+ fileSequence271.mp4
27
+ #EXT-X-PROGRAM-DATE-TIME:2019-02-14T02:14:00.106Z
28
+ #EXT-X-PART:GAP=YES,DURATION=0.33334,URI="filePart272.a.mp4"
29
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.b.mp4"
30
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.c.mp4"
31
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.d.mp4"
32
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.e.mp4"
33
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.f.mp4",INDEPENDENT=YES
34
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.g.mp4"
35
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.h.mp4"
36
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.i.mp4"
37
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.j.mp4"
38
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.k.mp4"
39
+ #EXT-X-PART:DURATION=0.33334,URI="filePart272.l.mp4"
40
+ #EXTINF:4.00008,
41
+ fileSequence272.mp4
42
+ #EXT-X-PART:DURATION=0.33334,URI="filePart273.0.mp4",INDEPENDENT=YES
43
+ #EXT-X-PART:DURATION=0.33334,URI="filePart273.1.mp4"
44
+ #EXT-X-PART:DURATION=0.33334,URI="filePart273.2.mp4"
45
+ #EXT-X-PART:DURATION=0.33334,URI="filePart273.3.mp4"
46
+ #EXT-X-PRELOAD-HINT:TYPE=PART,URI="filePart273.4.mp4"
47
+ #EXT-X-PRELOAD-HINT:TYPE=MAP,URI="file-init.mp4"
48
+
49
+ #EXT-X-RENDITION-REPORT:URI="../1M/waitForMSN.php",LAST-MSN=273,LAST-PART=3
50
+ #EXT-X-RENDITION-REPORT:URI="../4M/waitForMSN.php",LAST-MSN=273,LAST-PART=3
@@ -0,0 +1,14 @@
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
+ endList: true,
12
+ discontinuitySequence: 0,
13
+ discontinuityStarts: []
14
+ };
@@ -0,0 +1,5 @@
1
+ #EXTM3U
2
+ #EXT-X-TARGETDURATION:-10
3
+ #EXTINF:10,
4
+ /test/ts-files/zencoder/gogo/00001.ts
5
+ #EXT-X-ENDLIST