abrizer 0.1.0 → 0.2.0

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: b31f79c3371e0fed7e639734c2a5480274946c14
4
- data.tar.gz: aad270f032d907ac4a949d0b62ac5a8571bf7db8
3
+ metadata.gz: fc9378a163fb93bef80e0850ac0133674ac9106f
4
+ data.tar.gz: 633f89376f94e84237122b36a4aba365d34ef3db
5
5
  SHA512:
6
- metadata.gz: 862184366c07a709617e33fe30ffa0dc1e1337b42813a862797620a624182210473870ef94094b0ab7e466d4a8d1c76f501b44507656a41e3b56af927ca6886a
7
- data.tar.gz: b64b33fd21d00ffb2e63634eda4e9351f3e9b4fbbccb096213dce957b776fb45ac6e3560738e6422ad40f5f11a2bce8cdb16a9d279cf1065d94e8285f2fe2a24
6
+ metadata.gz: 5a9aff673d64f3ae930cdffc748aed9a844f82414dd1fd12bb93ddbcc0ae9624096c5a869a5a930ad75f90481aa34e12a8f3b12e0662bb68e6751fa6dbba5891
7
+ data.tar.gz: 3ef0a0a10a9b21f7645fb9f869f6df5b3a34aff48a87f02928077eb29d0259226fa7860d5c69b9acb41bdfab7382d51b01ed9075853587c4830621c380de2881
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Abrizer
2
2
 
3
- Abrizer takes a source video and creates various derivatives for delivery including adaptive bitrate formats like DASH and HLS.
3
+ Abrizer takes a source video and creates various derivatives for delivery including adaptive bitrate formats like DASH and HLS. An opinionated work in progress.
4
4
 
5
5
  ## Requirements
6
6
 
@@ -26,6 +26,8 @@ Or install it yourself as:
26
26
 
27
27
  $ gem install abrizer
28
28
 
29
+ See [Vagrant](#vagrant) below for one way to install dependencies and run the scripts.
30
+
29
31
  ## Usage
30
32
 
31
33
  Abrizer knows how to run various processes which can take a master or mezzanine video and create DASH and HLS streaming formats along with other derivatives like a fallback MP4 and WebM. The gem is opinionated about what formats to create and what settings to use. The intention is to provide a relatively complete but simple solution for delivering video over HTTP.
@@ -38,9 +40,10 @@ Some steps must be run after others as they have preconditions in order for subs
38
40
  - `mp4`: Process a progressive download MP4 from original
39
41
  - `vp9`: Process a progressive download WebM VP9 from original
40
42
  - `sprites`: Create video sprites and metadata WebVTT file retaining all the images in order for a human to later pick a poster image
43
+ - `poster`: Copies over a temporary poster image from the output of the sprites
41
44
  - `clean`: Clean out the intermediate and log files including MP4 files used for packaging but not required for delivery
42
45
 
43
- Every command requires the path to the original video file and an output directory.
46
+ All of the above commands require the path to the original video file and an output directory.
44
47
 
45
48
  ### Command Line
46
49
 
@@ -76,12 +79,29 @@ Abrizer::All.new(video_path, output_directory).run
76
79
 
77
80
  Take a look at `lib/abrizer/all.rb` for how to use the various classes provided. You can also see more examples in `lib/abrizer/cli.rb`. All classes expect to be passed the fully expanded path.
78
81
 
82
+ ### Canvas
83
+
84
+ Experimental support is provided for creating a IIIF Canvas. Note that this work is done in advance of a draft standard for including video in a IIIF manifest. It can be created after other steps with `abrizer help canvas` for more information.
85
+
79
86
  ## Development
80
87
 
81
88
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
82
89
 
83
90
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
84
91
 
92
+ ## Vagrant
93
+
94
+ The easiest way to do development on Abrizer or even try out the scripts is to use a Vagrant machine. If you have Vagrant and Virtualbox installed just run `vagrant up` and all dependencies will be installed.
95
+
96
+ This includes a web server that can be used for local testing of streams and videos. After `vagrant up` visit http://localhost:8088/v/ to see the contents of the project's `tmp` directory. Within the virtual machine (`vagrant ssh`) you can process a test video with:
97
+
98
+ ```shell
99
+ cd /vagrant
100
+ bundle exec exe/abrizer all test/videos/FullHDCinemaCountdown720p-8sec.mp4 tmp/countdown http://localhost:8088/v
101
+ ```
102
+
103
+ Now visit http://localhost:8088/v/countdown/ to see the files that were created. You can then test any of the videos or streams.
104
+
85
105
  ## Contributing
86
106
 
87
107
  Bug reports and pull requests are welcome on GitHub at https://github.com/jronallo/abrizer.
@@ -5,6 +5,8 @@ Vagrant.configure("2") do |config|
5
5
  config.vm.box = "boxcutter/centos72"
6
6
 
7
7
  config.vm.synced_folder '.', '/vagrant' #, type: 'nfs', mount_options: ['nolock', 'rw', 'vers=3', 'tcp', 'actimeo=2']
8
+ config.vm.network "forwarded_port", guest: 80, host: 8088,
9
+ auto_correct: true
8
10
 
9
11
  config.vm.provider "virtualbox" do |vb|
10
12
  vb.linked_clone = true
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency "bundler-audit"
27
27
 
28
28
  spec.add_dependency "thor"
29
- spec.add_dependency 'json'
30
29
  spec.add_dependency 'video_sprites', '0.2.0'
30
+ spec.add_dependency 'jbuilder'
31
+ spec.add_dependency 'yajl-ruby'
31
32
  end
@@ -7,6 +7,7 @@
7
7
  gather_facts: yes
8
8
  roles:
9
9
  - role: basic-setup
10
+ - role: apache
10
11
  - role: franklinkim.environment
11
12
  environment_config:
12
13
  PATH: /usr/local/bento4/bin:/usr/bin:/usr/local/bin
@@ -0,0 +1,23 @@
1
+ ---
2
+ - name: install apache
3
+ yum:
4
+ name: httpd
5
+ state: present
6
+ - name: enable cors
7
+ lineinfile:
8
+ dest: /etc/httpd/conf/httpd.conf
9
+ line: 'Header set Access-Control-Allow-Origin "*"'
10
+ # regexp: '<Directory "/var/www/html">'
11
+ insertafter: '<Directory "/var/www/html">'
12
+ - name: remove firewall
13
+ yum:
14
+ name: firewalld
15
+ state: removed
16
+ - name: symlink /var/www/html/v to /vagrant/tmp
17
+ file:
18
+ path: /var/www/html/v
19
+ src: /vagrant/tmp
20
+ state: link
21
+ force: yes
22
+ - name: restart httpd
23
+ service: name=httpd state=restarted
@@ -37,3 +37,4 @@
37
37
  - perl-devel
38
38
  - zlib-devel
39
39
  - tree
40
+ - jq
@@ -1,4 +1,8 @@
1
- require 'json'
1
+ require 'yajl'
2
+ require 'multi_json'
3
+ MultiJson.use :yajl
4
+ MultiJson.dump_options = {pretty: true}
5
+ require 'jbuilder'
2
6
  require 'video_sprites'
3
7
  require "abrizer/version"
4
8
  require 'abrizer/filepath_helpers'
@@ -15,8 +19,13 @@ require 'abrizer/cleaner'
15
19
  require 'abrizer/progressive_mp4'
16
20
  require 'abrizer/progressive_vp9'
17
21
  require 'abrizer/sprites'
22
+ require 'abrizer/captions'
23
+ require 'abrizer/canvas'
24
+ require 'abrizer/temporary_poster'
18
25
  require 'abrizer/all'
19
26
 
27
+
28
+
20
29
  module Abrizer
21
30
  # Your code goes here...
22
31
  end
@@ -1,9 +1,10 @@
1
1
  module Abrizer
2
2
  class All
3
3
 
4
- def initialize(filename, output_dir=nil)
4
+ def initialize(filename, output_dir, base_url)
5
5
  @filename = filename
6
6
  @output_directory = output_dir
7
+ @base_url = base_url
7
8
  end
8
9
 
9
10
  def run
@@ -12,7 +13,10 @@ module Abrizer
12
13
  Abrizer::ProgressiveVp9.new(@filename, @output_directory).create
13
14
  Abrizer::PackageDashBento.new(@filename, @output_directory).package
14
15
  Abrizer::PackageHlsBento.new(@filename, @output_directory).package
16
+ Abrizer::Captions.new(@filename, @output_directory).copy
15
17
  Abrizer::Sprites.new(@filename, @output_directory).create
18
+ Abrizer::TemporaryPoster.new(@output_directory).copy
19
+ Abrizer::Canvas.new(@filename, @output_directory, @base_url).create
16
20
  Abrizer::Cleaner.new(@filename, @output_directory).clean
17
21
  end
18
22
 
@@ -0,0 +1,216 @@
1
+ module Abrizer
2
+ # Creates a IIIF Canvas JSON-LD document.
3
+ class Canvas
4
+
5
+ include FilepathHelpers
6
+
7
+ # TODO: allow control of items/versions listed on canvas
8
+ def initialize(filepath, output_directory, base_url)
9
+ @filename = filepath
10
+ @output_directory = output_directory
11
+ @base_url = base_url
12
+ finder = AdaptationFinder.new(@filename)
13
+ @adaptations = finder.adaptations
14
+ end
15
+
16
+ def create
17
+ File.open(canvas_filepath, 'w') do |fh|
18
+ fh.puts create_json
19
+ end
20
+ end
21
+
22
+ def create_json
23
+ Jbuilder.encode do |json|
24
+ json.set! '@context', 'http://iiif.io/api/presentation/3/context.json'
25
+ json.id canvas_id
26
+ json.type "Canvas"
27
+ json.width max_width
28
+ json.height max_height
29
+ json.duration duration
30
+ thumbnail_json(json)
31
+ media_json(json)
32
+ end
33
+ end
34
+
35
+ def thumbnail_json(json)
36
+ if File.exist? poster_image_filepath
37
+ json.thumbnail do
38
+ json.id poster_id
39
+ json.type 'Image'
40
+ json.format 'image/jpeg'
41
+ end
42
+ end
43
+ end
44
+
45
+ def media_json(json)
46
+ json.media do
47
+ json.child! do
48
+ json.type "Annotation"
49
+ json.motivation 'painting'
50
+ json.target canvas_id
51
+ json.body do
52
+ json.type "Choice"
53
+ json.items do
54
+ mpd_item(json)
55
+ hlsts_item(json)
56
+ vp9_item(json)
57
+ mp4_item(json)
58
+ end
59
+ json.seeAlso do
60
+ # TODO: Allow for adding more than one captions/subtitle file
61
+ captions_seealso(json)
62
+ sprites_seealso(json)
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ def mpd_item(json)
70
+ if File.exist? mpd_filepath
71
+ json.child! do
72
+ json.id mpd_id
73
+ json.type "Video"
74
+ json.format "application/dash+xml"
75
+ json.width max_width
76
+ json.height max_height
77
+ end
78
+ end
79
+ end
80
+
81
+ def hlsts_item(json)
82
+ if File.exist? hlsts_filepath
83
+ json.child! do
84
+ json.id hlsts_id
85
+ json.type "Video"
86
+ # TODO: or "vnd.apple.mpegURL"
87
+ json.format "application/x-mpegURL"
88
+ json.width max_width
89
+ json.height max_height
90
+ end
91
+ end
92
+ end
93
+
94
+ def vp9_item(json)
95
+ if File.exist? vp9_filepath
96
+ json.child! do
97
+ json.id vp9_id
98
+ json.type "Video"
99
+ #TODO: add webm codecs
100
+ json.format "video/webm"
101
+ json.width max_width
102
+ json.height max_height
103
+ end
104
+ end
105
+ end
106
+
107
+ def mp4_item(json)
108
+ if File.exist? mp4_filepath
109
+ json.child! do
110
+ json.id mp4_id
111
+ json.type "Video"
112
+ #TODO: add mp4 codecs
113
+ json.format "video/mp4"
114
+ json.width mp4_width
115
+ json.height mp4_height
116
+ end
117
+ end
118
+ end
119
+
120
+ def captions_seealso(json)
121
+ # TODO: update captions seeAlso for multiple captions
122
+ captions_file = File.join output_directory, 'vtt/captions.vtt'
123
+ if File.exist? captions_file
124
+ json.child! do
125
+ json.id vtt_id
126
+ json.format 'application/webvtt'
127
+ json.label 'English captions'
128
+ json.language 'en'
129
+ json._comments "How make explicit how whether to use these as captions or subtitles?"
130
+ end
131
+ end
132
+ end
133
+
134
+ def sprites_seealso(json)
135
+ if File.exist? sprites_filepath
136
+ json.child! do
137
+ json.id sprites_id
138
+ json.format 'application/webvtt'
139
+ json.label 'image sprite metadata'
140
+ json._comments "How to include resources like video image sprites like those created by https://github.com/jronallo/video_sprites and used by various players?"
141
+ end
142
+ end
143
+ end
144
+
145
+ def media_base_url
146
+ File.join @base_url, output_directory_basename
147
+ end
148
+
149
+ def canvas_id
150
+ File.join media_base_url, canvas_partial_filepath
151
+ end
152
+
153
+ def poster_id
154
+ File.join media_base_url, poster_partial_filepath
155
+ end
156
+
157
+ def mpd_id
158
+ File.join media_base_url, mpd_partial_filepath
159
+ end
160
+
161
+ def hlsts_id
162
+ File.join media_base_url, hlsts_partial_filepath
163
+ end
164
+
165
+ def mp4_id
166
+ File.join media_base_url, mp4_partial_filepath
167
+ end
168
+
169
+ def vp9_id
170
+ File.join media_base_url, vp9_partial_filepath
171
+ end
172
+
173
+ def vtt_id
174
+ File.join media_base_url, 'vtt/captions.vtt'
175
+ end
176
+
177
+ def sprites_id
178
+ File.join media_base_url, sprites_partial_filepath
179
+ end
180
+
181
+ def duration
182
+ informer = Abrizer::FfprobeInformer.new(mp4_filename)
183
+ informer.duration.to_f
184
+ end
185
+
186
+ def max_width
187
+ @adaptations.last.width
188
+ end
189
+
190
+ def min_width
191
+ @adaptations.first.width
192
+ end
193
+
194
+ def max_height
195
+ @adaptations.last.height
196
+ end
197
+
198
+ def min_height
199
+ @adaptations.first.height
200
+ end
201
+
202
+ def mp4_width
203
+ @adaptations[-2].width
204
+ end
205
+
206
+ def mp4_height
207
+ @adaptations[-2].height
208
+ end
209
+
210
+ # TODO: DRY up with progressive_mp4.rb
211
+ def mp4_filename
212
+ File.join output_directory, "progressive.mp4"
213
+ end
214
+
215
+ end
216
+ end
@@ -0,0 +1,41 @@
1
+ module Abrizer
2
+ # Copies over any WebVTT captions that are beside the original video resource
3
+ # into the destination folder.
4
+ # TODO: This may only be needed if fMP4 derivatives aren't created since
5
+ # captions are copied over.
6
+ # TODO: Allow for more than one captions/subtitle file to be copied over.
7
+ class Captions
8
+
9
+ include FilepathHelpers
10
+
11
+ def initialize(filename, output_dir)
12
+ @filename = filename
13
+ @output_directory = output_dir
14
+ if vtt_dir_glob.length > 0
15
+ FileUtils.mkdir_p vtt_output_directory
16
+ end
17
+ end
18
+
19
+ def copy
20
+ vtt_dir_glob.each do |vtt|
21
+ # vtt_basename = File.basename vtt
22
+ vtt_filename = File.join vtt_output_directory, 'captions.vtt'
23
+ FileUtils.cp vtt, vtt_filename
24
+ end
25
+ end
26
+
27
+ def vtt_dir_glob
28
+ Dir.glob vtt_file_glob
29
+ end
30
+
31
+ # TODO: actually search for more than one VTT file
32
+ def vtt_file_glob
33
+ File.join filename_directory, "#{basename}.vtt"
34
+ end
35
+
36
+ def vtt_output_directory
37
+ File.join @output_directory, 'vtt'
38
+ end
39
+
40
+ end
41
+ end
@@ -2,11 +2,11 @@ require 'thor'
2
2
  module Abrizer
3
3
  class CLI < Thor
4
4
 
5
- desc 'all <filepath> <output_directory>', 'Runn all processes including creating ABR streams, progressive download versions, and images and video sprites'
6
- def all(filepath, output_dir=nil)
5
+ desc 'all <filepath> <output_directory> <base_url>', 'Run all processes including creating ABR streams, progressive download versions, and images and video sprites.'
6
+ def all(filepath, output_dir, base_url)
7
7
  filepath = File.expand_path filepath
8
8
  output_dir = File.expand_path output_dir
9
- Abrizer::All.new(filepath, output_dir).run
9
+ Abrizer::All.new(filepath, output_dir, base_url).run
10
10
  end
11
11
 
12
12
  desc 'abr <filepath> <output_directory>', 'From file create ABR streams, includes processing MP4 adaptations for packaging'
@@ -76,6 +76,26 @@ module Abrizer
76
76
  Abrizer::Sprites.new(filepath, output_dir).create
77
77
  end
78
78
 
79
+ desc 'poster <output_directory>', 'Copy over a temporary poster image based on the sprite images'
80
+ def poster(output_dir=nil)
81
+ output_dir = File.expand_path output_dir
82
+ Abrizer::TemporaryPoster.new(output_dir).copy
83
+ end
84
+
85
+ desc 'captions <filepath> <output_directory>', 'Captions and subtitles files with the same basename as the video file and with a .vtt extension are copied over into the output directory'
86
+ def captions(filepath, output_dir=nil)
87
+ filepath = File.expand_path filepath
88
+ output_dir = File.expand_path output_dir
89
+ Abrizer::Captions.new(filepath, output_dir).copy
90
+ end
91
+
92
+ desc 'canvas <filepath> <output_directory> <base_url>', 'Creates a IIIF Canvas JSON-LD document as an API into the resources'
93
+ def canvas(filepath, output_directory, base_url)
94
+ filepath = File.expand_path filepath
95
+ output_directory = File.expand_path output_directory
96
+ Abrizer::Canvas.new(filepath, output_directory, base_url).create
97
+ end
98
+
79
99
  desc 'clean <filepath> <output_directory>', 'Clean up intermediary files'
80
100
  def clean(filepath, output_dir=nil)
81
101
  Abrizer::Cleaner.new(filepath, output_dir).clean
@@ -8,7 +8,7 @@ module Abrizer
8
8
 
9
9
  def get_info
10
10
  @json_result = `#{ffmpeg_info_cmd}`
11
- @info = JSON.parse @json_result
11
+ @info = MultiJson.load @json_result
12
12
  end
13
13
 
14
14
  def width
@@ -19,6 +19,10 @@ module Abrizer
19
19
  video_stream['height'] if video_stream
20
20
  end
21
21
 
22
+ def duration
23
+ video_stream['duration'] if video_stream
24
+ end
25
+
22
26
  def display_aspect_ratio #dar
23
27
  dar = video_stream['display_aspect_ratio']
24
28
  sar = video_stream['sample_aspect_ratio']
@@ -20,6 +20,10 @@ module Abrizer
20
20
  end
21
21
  end
22
22
 
23
+ def output_directory_basename
24
+ File.basename output_directory
25
+ end
26
+
23
27
  def filename_directory
24
28
  File.dirname @filename
25
29
  end
@@ -29,5 +33,66 @@ module Abrizer
29
33
  extname = File.extname @filename
30
34
  File.basename @filename, extname
31
35
  end
36
+
37
+ def poster_partial_filepath
38
+ 'poster.jpg'
39
+ end
40
+
41
+ def mpd_partial_filepath
42
+ 'fmp4/stream.mpd'
43
+ end
44
+
45
+ def mpd_filepath
46
+ File.join output_directory, mpd_partial_filepath
47
+ end
48
+
49
+ def hlsts_partial_filepath
50
+ 'hls/master.m3u8'
51
+ end
52
+
53
+ def hlsts_filepath
54
+ File.join output_directory, hlsts_partial_filepath
55
+ end
56
+
57
+ def mp4_partial_filepath
58
+ 'progressive.mp4'
59
+ end
60
+
61
+ def mp4_filepath
62
+ File.join output_directory, mp4_partial_filepath
63
+ end
64
+
65
+ def vp9_partial_filepath
66
+ 'progressive-vp9.webm'
67
+ end
68
+
69
+ def vp9_filepath
70
+ File.join output_directory, vp9_partial_filepath
71
+ end
72
+
73
+ def canvas_partial_filepath
74
+ 'canvas.json'
75
+ end
76
+
77
+ def canvas_filepath
78
+ File.join output_directory, canvas_partial_filepath
79
+ end
80
+
81
+ def sprites_partial_filepath
82
+ 'sprites/sprites.vtt'
83
+ end
84
+
85
+ def sprites_filepath
86
+ File.join output_directory, sprites_partial_filepath
87
+ end
88
+
89
+ def first_image_filepath
90
+ File.join output_directory, 'sprites/images/img-00001.jpg'
91
+ end
92
+
93
+ def poster_image_filepath
94
+ File.join output_directory, 'poster.jpg'
95
+ end
96
+
32
97
  end
33
98
  end
@@ -0,0 +1,20 @@
1
+ module Abrizer
2
+ # It is usually better for a human to select a poster image, but we try to
3
+ # select a temporary one.
4
+ # Creating sprites leaves some images around so that is a prerequisite for
5
+ # this step.
6
+ # TODO: selection of a temporary poster image could be improved
7
+ class TemporaryPoster
8
+
9
+ include FilepathHelpers
10
+
11
+ def initialize(output_dir)
12
+ @output_directory = output_dir
13
+ end
14
+
15
+ def copy
16
+ FileUtils.cp first_image_filepath, poster_image_filepath
17
+ end
18
+
19
+ end
20
+ end
@@ -1,3 +1,3 @@
1
1
  module Abrizer
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abrizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Ronallo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-01-29 00:00:00.000000000 Z
11
+ date: 2017-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -95,7 +95,21 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: json
98
+ name: video_sprites
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 0.2.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 0.2.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: jbuilder
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - ">="
@@ -109,19 +123,19 @@ dependencies:
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
- name: video_sprites
126
+ name: yajl-ruby
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
- - - '='
129
+ - - ">="
116
130
  - !ruby/object:Gem::Version
117
- version: 0.2.0
131
+ version: '0'
118
132
  type: :runtime
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
- - - '='
136
+ - - ">="
123
137
  - !ruby/object:Gem::Version
124
- version: 0.2.0
138
+ version: '0'
125
139
  description: Creates adaptive bitrate streams and other delivery derivatives.
126
140
  email:
127
141
  - jronallo@gmail.com
@@ -141,6 +155,7 @@ files:
141
155
  - ansible/development-playbook.retry
142
156
  - ansible/development-playbook.yml
143
157
  - ansible/development.ini
158
+ - ansible/roles/apache/tasks/main.yml
144
159
  - ansible/roles/basic-setup/tasks/main.yml
145
160
  - ansible/roles/bento4/tasks/main.yml
146
161
  - ansible/roles/ffmpeg/defaults/main.yml
@@ -191,6 +206,8 @@ files:
191
206
  - lib/abrizer/adaptation.rb
192
207
  - lib/abrizer/adaptation_finder.rb
193
208
  - lib/abrizer/all.rb
209
+ - lib/abrizer/canvas.rb
210
+ - lib/abrizer/captions.rb
194
211
  - lib/abrizer/cleaner.rb
195
212
  - lib/abrizer/cli.rb
196
213
  - lib/abrizer/ffmpeg_processor.rb
@@ -204,6 +221,7 @@ files:
204
221
  - lib/abrizer/progressive_mp4.rb
205
222
  - lib/abrizer/progressive_vp9.rb
206
223
  - lib/abrizer/sprites.rb
224
+ - lib/abrizer/temporary_poster.rb
207
225
  - lib/abrizer/version.rb
208
226
  homepage: https://github.com/jronallo/abrizer
209
227
  licenses:
@@ -225,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
243
  version: '0'
226
244
  requirements: []
227
245
  rubyforge_project:
228
- rubygems_version: 2.5.2
246
+ rubygems_version: 2.6.6
229
247
  signing_key:
230
248
  specification_version: 4
231
249
  summary: Creates MPEG-DASH and HLS streams from a video file.