m3u8 0.7.0 → 0.7.1

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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/Gemfile +1 -0
  4. data/Guardfile +1 -0
  5. data/Rakefile +1 -0
  6. data/lib/m3u8.rb +6 -1
  7. data/lib/m3u8/byte_range.rb +1 -0
  8. data/lib/m3u8/date_range_item.rb +113 -0
  9. data/lib/m3u8/discontinuity_item.rb +1 -3
  10. data/lib/m3u8/encryptable.rb +1 -0
  11. data/lib/m3u8/error.rb +1 -0
  12. data/lib/m3u8/key_item.rb +1 -0
  13. data/lib/m3u8/map_item.rb +1 -0
  14. data/lib/m3u8/media_item.rb +1 -0
  15. data/lib/m3u8/playback_start.rb +1 -0
  16. data/lib/m3u8/playlist.rb +1 -0
  17. data/lib/m3u8/playlist_item.rb +12 -18
  18. data/lib/m3u8/reader.rb +17 -9
  19. data/lib/m3u8/segment_item.rb +1 -0
  20. data/lib/m3u8/session_data_item.rb +1 -0
  21. data/lib/m3u8/session_key_item.rb +1 -0
  22. data/lib/m3u8/time_item.rb +1 -0
  23. data/lib/m3u8/version.rb +2 -1
  24. data/lib/m3u8/writer.rb +1 -0
  25. data/spec/fixtures/date_range_scte35.m3u8 +16 -0
  26. data/spec/lib/m3u8/byte_range_spec.rb +1 -0
  27. data/spec/lib/m3u8/date_range_item_spec.rb +124 -0
  28. data/spec/lib/m3u8/discontinuity_item_spec.rb +1 -0
  29. data/spec/lib/m3u8/key_item_spec.rb +1 -0
  30. data/spec/lib/m3u8/map_item_spec.rb +2 -5
  31. data/spec/lib/m3u8/media_item_spec.rb +1 -0
  32. data/spec/lib/m3u8/playback_start_spec.rb +1 -0
  33. data/spec/lib/m3u8/playlist_item_spec.rb +1 -0
  34. data/spec/lib/m3u8/playlist_spec.rb +1 -0
  35. data/spec/lib/m3u8/reader_spec.rb +254 -236
  36. data/spec/lib/m3u8/segment_item_spec.rb +4 -14
  37. data/spec/lib/m3u8/session_data_item_spec.rb +1 -0
  38. data/spec/lib/m3u8/session_key_item_spec.rb +1 -0
  39. data/spec/lib/m3u8/time_item_spec.rb +1 -0
  40. data/spec/lib/m3u8/writer_spec.rb +174 -171
  41. data/spec/lib/m3u8_spec.rb +1 -0
  42. data/spec/spec_helper.rb +1 -0
  43. metadata +8 -3
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe M3u8::SegmentItem do
@@ -11,11 +12,7 @@ describe M3u8::SegmentItem do
11
12
  expect(item.program_date_time).to be_nil
12
13
 
13
14
  hash = { duration: 10.991, segment: 'test.ts', comment: 'anything',
14
- byterange: {
15
- length: 4500,
16
- start: 600
17
- }
18
- }
15
+ byterange: { length: 4500, start: 600 } }
19
16
  item = M3u8::SegmentItem.new(hash)
20
17
  expect(item.duration).to eq 10.991
21
18
  expect(item.byterange.length).to eq 4500
@@ -43,21 +40,14 @@ describe M3u8::SegmentItem do
43
40
  expect(output).to eq expected
44
41
 
45
42
  hash = { duration: 10.991, segment: 'test.ts', comment: 'anything',
46
- byterange: {
47
- length: 4500,
48
- start: 600
49
- }
50
- }
43
+ byterange: { length: 4500, start: 600 } }
51
44
  item = M3u8::SegmentItem.new(hash)
52
45
  output = item.to_s
53
46
  expected = "#EXTINF:10.991,anything\n#EXT-X-BYTERANGE:4500@600\ntest.ts"
54
47
  expect(output).to eq expected
55
48
 
56
49
  hash = { duration: 10.991, segment: 'test.ts', comment: 'anything',
57
- byterange: {
58
- length: 4500
59
- }
60
- }
50
+ byterange: { length: 4500 } }
61
51
  item = M3u8::SegmentItem.new(hash)
62
52
  output = item.to_s
63
53
  expected = "#EXTINF:10.991,anything\n#EXT-X-BYTERANGE:4500\ntest.ts"
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe M3u8::SessionDataItem do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe M3u8::SessionKeyItem do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe M3u8::TimeItem do
@@ -1,176 +1,179 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe M3u8::Writer do
4
- it 'should render master playlist' do
5
- options = { uri: 'playlist_url', bandwidth: 6400,
6
- audio_codec: 'mp3' }
7
- item = M3u8::PlaylistItem.new(options)
8
- playlist = M3u8::Playlist.new(version: 6, independent_segments: true)
9
- playlist.items << item
10
-
11
- output = "#EXTM3U\n" \
12
- "#EXT-X-VERSION:6\n" \
13
- "#EXT-X-INDEPENDENT-SEGMENTS\n" +
14
- %(#EXT-X-STREAM-INF:CODECS="mp4a.40.34") +
15
- ",BANDWIDTH=6400\nplaylist_url\n"
16
-
17
- io = StringIO.open
18
- writer = M3u8::Writer.new io
19
- writer.write playlist
20
- expect(io.string).to eq output
21
-
22
- options = { program_id: '1', uri: 'playlist_url', bandwidth: 6400,
23
- audio_codec: 'mp3' }
24
- item = M3u8::PlaylistItem.new(options)
25
- playlist = M3u8::Playlist.new
26
- playlist.items.push item
27
-
28
- output = "#EXTM3U\n" +
29
- %(#EXT-X-STREAM-INF:PROGRAM-ID=1,CODECS="mp4a.40.34") +
30
- ",BANDWIDTH=6400\nplaylist_url\n"
31
-
32
- io = StringIO.open
33
- writer = M3u8::Writer.new io
34
- writer.write playlist
35
- expect(io.string).to eq output
36
-
37
- options = { program_id: '2', uri: 'playlist_url', bandwidth: 50_000,
38
- width: 1920, height: 1080, profile: 'high', level: 4.1,
39
- audio_codec: 'aac-lc' }
40
- item = M3u8::PlaylistItem.new options
41
- playlist = M3u8::Playlist.new
42
- playlist.items.push item
43
-
44
- output = "#EXTM3U\n" \
45
- '#EXT-X-STREAM-INF:PROGRAM-ID=2,RESOLUTION=1920x1080,' +
46
- %(CODECS="avc1.640029,mp4a.40.2",BANDWIDTH=50000\n) +
47
- "playlist_url\n"
48
-
49
- io = StringIO.open
50
- writer = M3u8::Writer.new io
51
- writer.write playlist
52
- expect(io.string).to eq output
53
-
54
- playlist = M3u8::Playlist.new
55
- options = { program_id: '1', uri: 'playlist_url', bandwidth: 6400,
56
- audio_codec: 'mp3' }
57
- item = M3u8::PlaylistItem.new options
58
- playlist.items.push item
59
- options = { program_id: '2', uri: 'playlist_url', bandwidth: 50_000,
60
- width: 1920, height: 1080, profile: 'high', level: 4.1,
61
- audio_codec: 'aac-lc' }
62
- item = M3u8::PlaylistItem.new options
63
- playlist.items.push item
64
- options = { data_id: 'com.test.movie.title', value: 'Test',
65
- uri: 'http://test', language: 'en' }
66
- item = M3u8::SessionDataItem.new(options)
67
- playlist.items.push item
68
-
69
- output = "#EXTM3U\n" +
70
- %(#EXT-X-STREAM-INF:PROGRAM-ID=1,CODECS="mp4a.40.34") +
71
- ",BANDWIDTH=6400\nplaylist_url\n#EXT-X-STREAM-INF:PROGRAM-ID=2," +
72
- %(RESOLUTION=1920x1080,CODECS="avc1.640029,mp4a.40.2") +
73
- ",BANDWIDTH=50000\nplaylist_url\n" +
74
- %(#EXT-X-SESSION-DATA:DATA-ID="com.test.movie.title",) +
75
- %(VALUE="Test",URI="http://test",LANGUAGE="en"\n)
76
-
77
- io = StringIO.open
78
- writer = M3u8::Writer.new io
79
- writer.write playlist
80
- expect(io.string).to eq output
81
- end
82
-
83
- it 'should render playlist' do
84
- options = { duration: 11.344644, segment: '1080-7mbps00000.ts' }
85
- item = M3u8::SegmentItem.new(options)
86
- playlist = M3u8::Playlist.new(version: 7)
87
- playlist.items << item
88
-
89
- output = "#EXTM3U\n" \
90
- "#EXT-X-VERSION:7\n" \
91
- "#EXT-X-MEDIA-SEQUENCE:0\n" \
92
- "#EXT-X-TARGETDURATION:10\n" \
93
- "#EXTINF:11.344644,\n" \
94
- "1080-7mbps00000.ts\n" \
95
- "#EXT-X-ENDLIST\n"
96
- io = StringIO.open
97
- writer = M3u8::Writer.new(io)
98
- writer.write playlist
99
- expect(io.string).to eq output
100
-
101
- options = { method: 'AES-128', uri: 'http://test.key',
102
- iv: 'D512BBF', key_format: 'identity',
103
- key_format_versions: '1/3' }
104
- item = M3u8::KeyItem.new(options)
105
- playlist.items << item
106
-
107
- options = { duration: 11.261233, segment: '1080-7mbps00001.ts' }
108
- item = M3u8::SegmentItem.new options
109
- playlist.items << item
110
-
111
- output = "#EXTM3U\n" \
112
- "#EXT-X-VERSION:7\n" \
113
- "#EXT-X-MEDIA-SEQUENCE:0\n" \
114
- "#EXT-X-TARGETDURATION:10\n" \
115
- "#EXTINF:11.344644,\n" \
116
- "1080-7mbps00000.ts\n" +
117
- %(#EXT-X-KEY:METHOD=AES-128,URI="http://test.key",) +
118
- %(IV=D512BBF,KEYFORMAT="identity",KEYFORMATVERSIONS="1/3"\n) +
119
- "#EXTINF:11.261233,\n" \
120
- "1080-7mbps00001.ts\n" \
121
- "#EXT-X-ENDLIST\n"
122
- io = StringIO.open
123
- writer = M3u8::Writer.new(io)
124
- writer.write playlist
125
- expect(io.string).to eq output
126
-
127
- options = { version: 4, cache: false, target: 12, sequence: 1,
128
- type: 'EVENT', iframes_only: true }
129
- playlist = M3u8::Playlist.new(options)
130
- options = { duration: 11.344644, segment: '1080-7mbps00000.ts' }
131
- item = M3u8::SegmentItem.new(options)
132
- playlist.items << item
133
-
134
- output = "#EXTM3U\n" \
135
- "#EXT-X-PLAYLIST-TYPE:EVENT\n" \
136
- "#EXT-X-VERSION:4\n" \
137
- "#EXT-X-I-FRAMES-ONLY\n" \
138
- "#EXT-X-MEDIA-SEQUENCE:1\n" \
139
- "#EXT-X-ALLOW-CACHE:NO\n" \
140
- "#EXT-X-TARGETDURATION:12\n" \
141
- "#EXTINF:11.344644,\n" \
142
- "1080-7mbps00000.ts\n" \
143
- "#EXT-X-ENDLIST\n"
144
- io = StringIO.open
145
- writer = M3u8::Writer.new io
146
- writer.write playlist
147
- expect(io.string).to eq output
148
- end
149
-
150
- it 'should render the target duration as a decimal-integer' do
151
- playlist = M3u8::Playlist.new(target: 6.2)
152
- io = StringIO.open
153
- writer = M3u8::Writer.new io
154
- writer.write playlist
155
- expect(io.string).to include('#EXT-X-TARGETDURATION:6')
156
- end
157
-
158
- it 'should raise error on write if item types are mixed' do
159
- playlist = M3u8::Playlist.new
160
-
161
- hash = { program_id: 1, width: 1920, height: 1080, codecs: 'avc',
162
- bandwidth: 540, playlist: 'test.url' }
163
- item = M3u8::PlaylistItem.new(hash)
164
- playlist.items.push item
165
-
166
- hash = { duration: 10.991, segment: 'test.ts' }
167
- item = M3u8::SegmentItem.new(hash)
168
- playlist.items.push item
169
-
170
- message = 'Playlist is invalid.'
171
- io = StringIO.new
172
- writer = M3u8::Writer.new io
173
- expect { writer.write playlist }
174
- .to raise_error(M3u8::PlaylistTypeError, message)
5
+ describe '#write' do
6
+ it 'should render master playlist' do
7
+ options = { uri: 'playlist_url', bandwidth: 6400,
8
+ audio_codec: 'mp3' }
9
+ item = M3u8::PlaylistItem.new(options)
10
+ playlist = M3u8::Playlist.new(version: 6, independent_segments: true)
11
+ playlist.items << item
12
+
13
+ output = "#EXTM3U\n" \
14
+ "#EXT-X-VERSION:6\n" \
15
+ "#EXT-X-INDEPENDENT-SEGMENTS\n" +
16
+ %(#EXT-X-STREAM-INF:CODECS="mp4a.40.34") +
17
+ ",BANDWIDTH=6400\nplaylist_url\n"
18
+
19
+ io = StringIO.open
20
+ writer = M3u8::Writer.new(io)
21
+ writer.write(playlist)
22
+ expect(io.string).to eq(output)
23
+
24
+ options = { program_id: '1', uri: 'playlist_url', bandwidth: 6400,
25
+ audio_codec: 'mp3' }
26
+ item = M3u8::PlaylistItem.new(options)
27
+ playlist = M3u8::Playlist.new
28
+ playlist.items << item
29
+
30
+ output = "#EXTM3U\n" +
31
+ %(#EXT-X-STREAM-INF:PROGRAM-ID=1,CODECS="mp4a.40.34") +
32
+ ",BANDWIDTH=6400\nplaylist_url\n"
33
+
34
+ io = StringIO.open
35
+ writer = M3u8::Writer.new(io)
36
+ writer.write(playlist)
37
+ expect(io.string).to eq(output)
38
+
39
+ options = { program_id: '2', uri: 'playlist_url', bandwidth: 50_000,
40
+ width: 1920, height: 1080, profile: 'high', level: 4.1,
41
+ audio_codec: 'aac-lc' }
42
+ item = M3u8::PlaylistItem.new(options)
43
+ playlist = M3u8::Playlist.new
44
+ playlist.items << item
45
+
46
+ output = "#EXTM3U\n" \
47
+ '#EXT-X-STREAM-INF:PROGRAM-ID=2,RESOLUTION=1920x1080,' +
48
+ %(CODECS="avc1.640029,mp4a.40.2",BANDWIDTH=50000\n) +
49
+ "playlist_url\n"
50
+
51
+ io = StringIO.open
52
+ writer = M3u8::Writer.new(io)
53
+ writer.write(playlist)
54
+ expect(io.string).to eq(output)
55
+
56
+ playlist = M3u8::Playlist.new
57
+ options = { program_id: '1', uri: 'playlist_url', bandwidth: 6400,
58
+ audio_codec: 'mp3' }
59
+ item = M3u8::PlaylistItem.new(options)
60
+ playlist.items << item
61
+ options = { program_id: '2', uri: 'playlist_url', bandwidth: 50_000,
62
+ width: 1920, height: 1080, profile: 'high', level: 4.1,
63
+ audio_codec: 'aac-lc' }
64
+ item = M3u8::PlaylistItem.new(options)
65
+ playlist.items << item
66
+ options = { data_id: 'com.test.movie.title', value: 'Test',
67
+ uri: 'http://test', language: 'en' }
68
+ item = M3u8::SessionDataItem.new(options)
69
+ playlist.items << item
70
+
71
+ output = "#EXTM3U\n" +
72
+ %(#EXT-X-STREAM-INF:PROGRAM-ID=1,CODECS="mp4a.40.34") +
73
+ ",BANDWIDTH=6400\nplaylist_url\n#EXT-X-STREAM-INF:PROGRAM-ID=2," +
74
+ %(RESOLUTION=1920x1080,CODECS="avc1.640029,mp4a.40.2") +
75
+ ",BANDWIDTH=50000\nplaylist_url\n" +
76
+ %(#EXT-X-SESSION-DATA:DATA-ID="com.test.movie.title",) +
77
+ %(VALUE="Test",URI="http://test",LANGUAGE="en"\n)
78
+
79
+ io = StringIO.open
80
+ writer = M3u8::Writer.new(io)
81
+ writer.write(playlist)
82
+ expect(io.string).to eq(output)
83
+ end
84
+
85
+ it 'should render playlist' do
86
+ options = { duration: 11.344644, segment: '1080-7mbps00000.ts' }
87
+ item = M3u8::SegmentItem.new(options)
88
+ playlist = M3u8::Playlist.new(version: 7)
89
+ playlist.items << item
90
+
91
+ output = "#EXTM3U\n" \
92
+ "#EXT-X-VERSION:7\n" \
93
+ "#EXT-X-MEDIA-SEQUENCE:0\n" \
94
+ "#EXT-X-TARGETDURATION:10\n" \
95
+ "#EXTINF:11.344644,\n" \
96
+ "1080-7mbps00000.ts\n" \
97
+ "#EXT-X-ENDLIST\n"
98
+ io = StringIO.open
99
+ writer = M3u8::Writer.new(io)
100
+ writer.write(playlist)
101
+ expect(io.string).to eq(output)
102
+
103
+ options = { method: 'AES-128', uri: 'http://test.key',
104
+ iv: 'D512BBF', key_format: 'identity',
105
+ key_format_versions: '1/3' }
106
+ item = M3u8::KeyItem.new(options)
107
+ playlist.items << item
108
+
109
+ options = { duration: 11.261233, segment: '1080-7mbps00001.ts' }
110
+ item = M3u8::SegmentItem.new(options)
111
+ playlist.items << item
112
+
113
+ output = "#EXTM3U\n" \
114
+ "#EXT-X-VERSION:7\n" \
115
+ "#EXT-X-MEDIA-SEQUENCE:0\n" \
116
+ "#EXT-X-TARGETDURATION:10\n" \
117
+ "#EXTINF:11.344644,\n" \
118
+ "1080-7mbps00000.ts\n" +
119
+ %(#EXT-X-KEY:METHOD=AES-128,URI="http://test.key",) +
120
+ %(IV=D512BBF,KEYFORMAT="identity",KEYFORMATVERSIONS="1/3"\n) +
121
+ "#EXTINF:11.261233,\n" \
122
+ "1080-7mbps00001.ts\n" \
123
+ "#EXT-X-ENDLIST\n"
124
+ io = StringIO.open
125
+ writer = M3u8::Writer.new(io)
126
+ writer.write(playlist)
127
+ expect(io.string).to eq(output)
128
+
129
+ options = { version: 4, cache: false, target: 12, sequence: 1,
130
+ type: 'EVENT', iframes_only: true }
131
+ playlist = M3u8::Playlist.new(options)
132
+ options = { duration: 11.344644, segment: '1080-7mbps00000.ts' }
133
+ item = M3u8::SegmentItem.new(options)
134
+ playlist.items << item
135
+
136
+ output = "#EXTM3U\n" \
137
+ "#EXT-X-PLAYLIST-TYPE:EVENT\n" \
138
+ "#EXT-X-VERSION:4\n" \
139
+ "#EXT-X-I-FRAMES-ONLY\n" \
140
+ "#EXT-X-MEDIA-SEQUENCE:1\n" \
141
+ "#EXT-X-ALLOW-CACHE:NO\n" \
142
+ "#EXT-X-TARGETDURATION:12\n" \
143
+ "#EXTINF:11.344644,\n" \
144
+ "1080-7mbps00000.ts\n" \
145
+ "#EXT-X-ENDLIST\n"
146
+ io = StringIO.open
147
+ writer = M3u8::Writer.new(io)
148
+ writer.write(playlist)
149
+ expect(io.string).to eq(output)
150
+ end
151
+
152
+ it 'should render the target duration as a decimal-integer' do
153
+ playlist = M3u8::Playlist.new(target: 6.2)
154
+ io = StringIO.open
155
+ writer = M3u8::Writer.new(io)
156
+ writer.write(playlist)
157
+ expect(io.string).to include('#EXT-X-TARGETDURATION:6')
158
+ end
159
+
160
+ it 'should raise error on write if item types are mixed' do
161
+ playlist = M3u8::Playlist.new
162
+
163
+ hash = { program_id: 1, width: 1920, height: 1080, codecs: 'avc',
164
+ bandwidth: 540, playlist: 'test.url' }
165
+ item = M3u8::PlaylistItem.new(hash)
166
+ playlist.items << item
167
+
168
+ hash = { duration: 10.991, segment: 'test.ts' }
169
+ item = M3u8::SegmentItem.new(hash)
170
+ playlist.items << item
171
+
172
+ message = 'Playlist is invalid.'
173
+ io = StringIO.new
174
+ writer = M3u8::Writer.new(io)
175
+ expect { writer.write(playlist) }
176
+ .to raise_error(M3u8::PlaylistTypeError, message)
177
+ end
175
178
  end
176
179
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'm3u8'
2
3
  require 'simplecov'
3
4
  require 'coveralls'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: m3u8
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seth Deckard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-03 00:00:00.000000000 Z
11
+ date: 2017-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -128,6 +128,7 @@ files:
128
128
  - Rakefile
129
129
  - lib/m3u8.rb
130
130
  - lib/m3u8/byte_range.rb
131
+ - lib/m3u8/date_range_item.rb
131
132
  - lib/m3u8/discontinuity_item.rb
132
133
  - lib/m3u8/encryptable.rb
133
134
  - lib/m3u8/error.rb
@@ -145,6 +146,7 @@ files:
145
146
  - lib/m3u8/version.rb
146
147
  - lib/m3u8/writer.rb
147
148
  - m3u8.gemspec
149
+ - spec/fixtures/date_range_scte35.m3u8
148
150
  - spec/fixtures/encrypted.m3u8
149
151
  - spec/fixtures/iframes.m3u8
150
152
  - spec/fixtures/map_playlist.m3u8
@@ -157,6 +159,7 @@ files:
157
159
  - spec/fixtures/variant_angles.m3u8
158
160
  - spec/fixtures/variant_audio.m3u8
159
161
  - spec/lib/m3u8/byte_range_spec.rb
162
+ - spec/lib/m3u8/date_range_item_spec.rb
160
163
  - spec/lib/m3u8/discontinuity_item_spec.rb
161
164
  - spec/lib/m3u8/key_item_spec.rb
162
165
  - spec/lib/m3u8/map_item_spec.rb
@@ -192,11 +195,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
192
195
  version: '0'
193
196
  requirements: []
194
197
  rubyforge_project:
195
- rubygems_version: 2.6.8
198
+ rubygems_version: 2.5.2
196
199
  signing_key:
197
200
  specification_version: 4
198
201
  summary: Generate and parse m3u8 playlists for HTTP Live Streaming (HLS).
199
202
  test_files:
203
+ - spec/fixtures/date_range_scte35.m3u8
200
204
  - spec/fixtures/encrypted.m3u8
201
205
  - spec/fixtures/iframes.m3u8
202
206
  - spec/fixtures/map_playlist.m3u8
@@ -209,6 +213,7 @@ test_files:
209
213
  - spec/fixtures/variant_angles.m3u8
210
214
  - spec/fixtures/variant_audio.m3u8
211
215
  - spec/lib/m3u8/byte_range_spec.rb
216
+ - spec/lib/m3u8/date_range_item_spec.rb
212
217
  - spec/lib/m3u8/discontinuity_item_spec.rb
213
218
  - spec/lib/m3u8/key_item_spec.rb
214
219
  - spec/lib/m3u8/map_item_spec.rb