m3u8 0.6.3 → 0.6.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 423d91cc5175fd049a43ce26efff10b0ca1ad16f
4
- data.tar.gz: 65b634315e86db26cdfdc6f19f89b245714bbb6e
3
+ metadata.gz: e96c846721a2a84feb5682879e7e3bfcb3f3e0dd
4
+ data.tar.gz: 438952587f84fa55401e22ba4c2f5c089de14af9
5
5
  SHA512:
6
- metadata.gz: 48e8dd6e5122c35707fbbf8da5a2d2e2633c5083b4da1b7e993c5301f72d1a53a696129f744a26e2f44e6d965e890465084ee5b383ea6d2596510b63e8b49f18
7
- data.tar.gz: a06803324c593c55cbe3943b28194262949bbc353e9562bb200487e0a96bd36b2b119078dfb5f5be7e31e961cd24610830f94c1e10ea20b2bbad492c4e7a6941
6
+ metadata.gz: 62a05705eefa8c3929c9db56f65be2f2137f90c1e3fecd8e228a840c7285a9a5f20b7c2a59055ba462e55329d54214bee41497c5d0aef3b965cd6deef784d3f4
7
+ data.tar.gz: 3a34c9d4e231f2d37030b4a8357accc486d1cb88d67b238abe1183f1f1e87e8e7d2a0d8b45bd0bfb51ff682c664c78c7c34a43f166f4c77d2a85695763479289
@@ -1,4 +1,6 @@
1
- #### 0.6.3 (2/17/2016) - Merged pulled request #7 from [jviney](https://github.com/jviney), fixing bug with require order.
1
+ #### 0.6.4 (2/21/2016) - Merged pull requests #8, #9, and #10 from [jviney](https://github.com/jviney). Adds FRAME-RATE attribute to PlayListItem, fixes NONE option for CLOSED-CAPTIONS attribute.
2
+
3
+ #### 0.6.3 (2/17/2016) - Merged pull request #7 from [jviney](https://github.com/jviney), fixing bug with require order.
2
4
 
3
5
  #### 0.6.2 (2/16/2016) - Added support for EXT-X-SESSION-KEY tags. Merged pulled request #6 from [jviney](https://github.com/jviney), fixing bug with codec string value.
4
6
 
@@ -1,3 +1,4 @@
1
+ require 'bigdecimal'
1
2
  require 'stringio'
2
3
  Dir[File.dirname(__FILE__) + '/m3u8/*.rb'].sort.each { |file| require file }
3
4
 
@@ -5,7 +5,8 @@ module M3u8
5
5
  extend M3u8
6
6
  attr_accessor :program_id, :width, :height, :codecs, :bandwidth,
7
7
  :audio_codec, :level, :profile, :video, :audio, :uri,
8
- :average_bandwidth, :subtitles, :closed_captions, :iframe
8
+ :average_bandwidth, :subtitles, :closed_captions, :iframe,
9
+ :frame_rate
9
10
  MISSING_CODEC_MESSAGE = 'Audio or video codec info should be provided.'
10
11
 
11
12
  def initialize(params = {})
@@ -19,12 +20,14 @@ module M3u8
19
20
  attributes = parse_attributes text
20
21
  resolution = parse_resolution attributes['RESOLUTION']
21
22
  average = parse_average_bandwidth attributes['AVERAGE-BANDWIDTH']
23
+ frame_rate = parse_frame_rate attributes['FRAME-RATE']
22
24
  options = { program_id: attributes['PROGRAM-ID'],
23
25
  codecs: attributes['CODECS'],
24
26
  width: resolution[:width],
25
27
  height: resolution[:height],
26
28
  bandwidth: attributes['BANDWIDTH'].to_i,
27
29
  average_bandwidth: average,
30
+ frame_rate: frame_rate,
28
31
  video: attributes['VIDEO'], audio: attributes['AUDIO'],
29
32
  uri: attributes['URI'], subtitles: attributes['SUBTITLES'],
30
33
  closed_captions: attributes['CLOSED-CAPTIONS'] }
@@ -73,6 +76,13 @@ module M3u8
73
76
  { width: width, height: height }
74
77
  end
75
78
 
79
+ def self.parse_frame_rate(frame_rate)
80
+ return if frame_rate.nil?
81
+
82
+ value = BigDecimal(frame_rate)
83
+ value if value > 0
84
+ end
85
+
76
86
  def validate
77
87
  fail MissingCodecError, MISSING_CODEC_MESSAGE if codecs.nil?
78
88
  end
@@ -89,6 +99,7 @@ module M3u8
89
99
  codecs_format,
90
100
  bandwidth_format,
91
101
  average_bandwidth_format,
102
+ frame_rate_format,
92
103
  audio_format,
93
104
  video_format,
94
105
  subtitles_format,
@@ -105,6 +116,11 @@ module M3u8
105
116
  "RESOLUTION=#{resolution}"
106
117
  end
107
118
 
119
+ def frame_rate_format
120
+ return if frame_rate.nil?
121
+ "FRAME-RATE=#{format('%.3f', frame_rate)}"
122
+ end
123
+
108
124
  def codecs_format
109
125
  %(CODECS="#{codecs}")
110
126
  end
@@ -135,7 +151,12 @@ module M3u8
135
151
 
136
152
  def closed_captions_format
137
153
  return if closed_captions.nil?
138
- %(CLOSED-CAPTIONS="#{closed_captions}")
154
+
155
+ if closed_captions == 'NONE'
156
+ %(CLOSED-CAPTIONS=NONE)
157
+ else
158
+ %(CLOSED-CAPTIONS="#{closed_captions}")
159
+ end
139
160
  end
140
161
 
141
162
  def audio_codec
@@ -1,4 +1,4 @@
1
1
  # M3u8 provides parsing, generation, and validation of m3u8 playlists
2
2
  module M3u8
3
- VERSION = '0.6.3'
3
+ VERSION = '0.6.4'
4
4
  end
@@ -17,7 +17,7 @@ describe M3u8::PlaylistItem do
17
17
 
18
18
  it 'should parse m3u8 text into instance' do
19
19
  format = %(#EXT-X-STREAM-INF:CODECS="avc",BANDWIDTH=540,) +
20
- %(PROGRAM-ID=1,RESOLUTION=1920x1080,) +
20
+ %(PROGRAM-ID=1,RESOLUTION=1920x1080,FRAME-RATE=23.976,) +
21
21
  %(AVERAGE-BANDWIDTH=550,AUDIO="test",VIDEO="test2",) +
22
22
  %(SUBTITLES="subs",CLOSED-CAPTIONS="caps",URI="test.url")
23
23
  item = M3u8::PlaylistItem.parse(format)
@@ -27,6 +27,7 @@ describe M3u8::PlaylistItem do
27
27
  expect(item.average_bandwidth).to eq 550
28
28
  expect(item.width).to eq 1920
29
29
  expect(item.height).to eq 1080
30
+ expect(item.frame_rate).to eq BigDecimal('23.976')
30
31
  expect(item.audio).to eq 'test'
31
32
  expect(item.video).to eq 'test2'
32
33
  expect(item.subtitles).to eq 'subs'
@@ -52,11 +53,11 @@ describe M3u8::PlaylistItem do
52
53
 
53
54
  it 'should provide m3u8 format representation' do
54
55
  hash = { program_id: 1, width: 1920, height: 1080, codecs: 'avc',
55
- bandwidth: 540, uri: 'test.url' }
56
+ bandwidth: 540, uri: 'test.url', closed_captions: 'NONE' }
56
57
  item = M3u8::PlaylistItem.new(hash)
57
58
  output = item.to_s
58
59
  expected = '#EXT-X-STREAM-INF:PROGRAM-ID=1,RESOLUTION=1920x1080,' +
59
- %(CODECS="avc",BANDWIDTH=540\ntest.url)
60
+ %(CODECS="avc",BANDWIDTH=540,CLOSED-CAPTIONS=NONE\ntest.url)
60
61
  expect(output).to eq expected
61
62
 
62
63
  hash = { program_id: 1, codecs: 'avc', bandwidth: 540,
@@ -68,13 +69,14 @@ describe M3u8::PlaylistItem do
68
69
  expect(output).to eq expected
69
70
 
70
71
  hash = { codecs: 'avc', bandwidth: 540, uri: 'test.url', audio: 'test',
71
- video: 'test2', average_bandwidth: 550, subtitles: 'subs',
72
- closed_captions: 'caps' }
72
+ video: 'test2', average_bandwidth: 500, subtitles: 'subs',
73
+ frame_rate: 30, closed_captions: 'caps' }
73
74
  item = M3u8::PlaylistItem.new(hash)
74
75
  output = item.to_s
75
76
  expected = %(#EXT-X-STREAM-INF:CODECS="avc",BANDWIDTH=540,) +
76
- %(AVERAGE-BANDWIDTH=550,AUDIO="test",VIDEO="test2",) +
77
- %(SUBTITLES="subs",CLOSED-CAPTIONS="caps"\ntest.url)
77
+ %(AVERAGE-BANDWIDTH=500,FRAME-RATE=30.000,) +
78
+ %(AUDIO="test",VIDEO="test2",SUBTITLES="subs",) +
79
+ %(CLOSED-CAPTIONS="caps"\ntest.url)
78
80
  expect(output).to eq expected
79
81
  end
80
82
 
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.6.3
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seth Deckard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-18 00:00:00.000000000 Z
11
+ date: 2016-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler