active_encode 0.5.0 → 0.6.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 +4 -4
- data/.circleci/config.yml +72 -0
- data/.rubocop.yml +8 -70
- data/.rubocop_todo.yml +64 -0
- data/Gemfile +3 -3
- data/active_encode.gemspec +4 -1
- data/app/controllers/active_encode/encode_record_controller.rb +1 -0
- data/app/jobs/active_encode/polling_job.rb +1 -1
- data/app/models/active_encode/encode_record.rb +1 -0
- data/db/migrate/20180822021048_create_active_encode_encode_records.rb +1 -0
- data/db/migrate/20190702153755_add_create_options_to_active_encode_encode_records.rb +6 -0
- data/db/migrate/20190712174821_add_progress_to_active_encode_encode_records.rb +6 -0
- data/lib/active_encode.rb +1 -0
- data/lib/active_encode/base.rb +1 -0
- data/lib/active_encode/callbacks.rb +1 -0
- data/lib/active_encode/core.rb +4 -3
- data/lib/active_encode/engine.rb +1 -0
- data/lib/active_encode/engine_adapter.rb +1 -0
- data/lib/active_encode/engine_adapters.rb +2 -1
- data/lib/active_encode/engine_adapters/elastic_transcoder_adapter.rb +25 -24
- data/lib/active_encode/engine_adapters/ffmpeg_adapter.rb +43 -58
- data/lib/active_encode/engine_adapters/matterhorn_adapter.rb +5 -4
- data/lib/active_encode/engine_adapters/test_adapter.rb +5 -4
- data/lib/active_encode/engine_adapters/zencoder_adapter.rb +3 -2
- data/lib/active_encode/global_id.rb +2 -1
- data/lib/active_encode/input.rb +3 -2
- data/lib/active_encode/output.rb +3 -2
- data/lib/active_encode/persistence.rb +7 -3
- data/lib/active_encode/polling.rb +2 -1
- data/lib/active_encode/status.rb +1 -0
- data/lib/active_encode/technical_metadata.rb +3 -2
- data/lib/active_encode/version.rb +2 -1
- data/lib/file_locator.rb +7 -8
- data/spec/controllers/encode_record_controller_spec.rb +2 -1
- data/spec/integration/elastic_transcoder_adapter_spec.rb +26 -26
- data/spec/integration/ffmpeg_adapter_spec.rb +26 -22
- data/spec/integration/matterhorn_adapter_spec.rb +6 -5
- data/spec/integration/zencoder_adapter_spec.rb +15 -14
- data/spec/rails_helper.rb +1 -0
- data/spec/routing/encode_record_controller_routing_spec.rb +1 -0
- data/spec/shared_specs/engine_adapter_specs.rb +1 -1
- data/spec/spec_helper.rb +2 -1
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +13 -12
- data/spec/units/callbacks_spec.rb +3 -2
- data/spec/units/core_spec.rb +9 -8
- data/spec/units/engine_adapter_spec.rb +1 -0
- data/spec/units/file_locator_spec.rb +19 -18
- data/spec/units/global_id_spec.rb +4 -3
- data/spec/units/input_spec.rb +8 -5
- data/spec/units/output_spec.rb +8 -5
- data/spec/units/persistence_spec.rb +8 -4
- data/spec/units/polling_job_spec.rb +7 -6
- data/spec/units/polling_spec.rb +1 -0
- data/spec/units/status_spec.rb +3 -3
- metadata +37 -7
- data/.travis.yml +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22be45555a3ea9208b56552c17e86a0052865e753cd2cd03fae9a876ebee6964
|
4
|
+
data.tar.gz: 55ba9a105b56e2d660b8bbe237cee26dc10caea24c87dd0b7e81a46b2ad28979
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3ced87039d84e596fc2f011f70b586ef46d2501af00d94e64e91a2241df93c9e93b153814125454eb8af96ae63a2289188067fa4193fe01ee6568d5b9471113
|
7
|
+
data.tar.gz: 5dc21ccd48592fe2460599404f17c886f242f77a57cd3dbc9a8064176da44f9f1566a9cbf2c529491f037f25da252e0dd3fe40e345b15d9310b7c4464add310a
|
@@ -0,0 +1,72 @@
|
|
1
|
+
version: 2.1
|
2
|
+
orbs:
|
3
|
+
samvera: samvera/circleci-orb@0
|
4
|
+
jobs:
|
5
|
+
bundle_and_test:
|
6
|
+
parameters:
|
7
|
+
ruby_version:
|
8
|
+
type: string
|
9
|
+
default: 2.6.3
|
10
|
+
rails_version:
|
11
|
+
type: string
|
12
|
+
default: 5.2.3
|
13
|
+
bundler_version:
|
14
|
+
type: string
|
15
|
+
default: 2.0.1
|
16
|
+
executor:
|
17
|
+
name: 'samvera/ruby'
|
18
|
+
ruby_version: << parameters.ruby_version >>
|
19
|
+
environment:
|
20
|
+
ENGINE_CART_RAILS_OPTIONS: --skip-git --skip-bundle --skip-listen --skip-spring --skip-yarn --skip-keeps --skip-coffee --skip-puma --skip-test
|
21
|
+
RAILS_VERSION: << parameters.rails_version >>
|
22
|
+
working_directory: ~/project
|
23
|
+
steps:
|
24
|
+
- run: sudo apt-get install libmms0
|
25
|
+
- run: sudo wget -P /tmp/ https://mediaarea.net/download/binary/libzen0/0.4.37/libzen0v5_0.4.37-1_amd64.Debian_9.0.deb
|
26
|
+
- run: sudo wget -P /tmp/ https://mediaarea.net/download/binary/libmediainfo0/19.04/libmediainfo0v5_19.04-1_amd64.Debian_9.0.deb
|
27
|
+
- run: sudo wget -P /tmp/ https://mediaarea.net/download/binary/mediainfo/19.04/mediainfo_19.04-1_amd64.Debian_9.0.deb
|
28
|
+
- run: sudo dpkg -i /tmp/libzen0v5_0.4.37-1_amd64.Debian_9.0.deb /tmp/libmediainfo0v5_19.04-1_amd64.Debian_9.0.deb /tmp/mediainfo_19.04-1_amd64.Debian_9.0.deb
|
29
|
+
|
30
|
+
- samvera/cached_checkout
|
31
|
+
|
32
|
+
- samvera/bundle_for_gem:
|
33
|
+
ruby_version: << parameters.ruby_version >>
|
34
|
+
bundler_version: << parameters.bundler_version >>
|
35
|
+
project: active_encode
|
36
|
+
|
37
|
+
- samvera/engine_cart_generate:
|
38
|
+
cache_key: v2-internal-test-app-{{ checksum "active_encode.gemspec" }}-{{ checksum "spec/test_app_templates/lib/generators/test_app_generator.rb" }}-<< parameters.rails_version >>-<< parameters.ruby_version >>
|
39
|
+
|
40
|
+
- samvera/bundle_for_gem:
|
41
|
+
ruby_version: << parameters.ruby_version >>
|
42
|
+
bundler_version: << parameters.bundler_version >>
|
43
|
+
project: active_encode
|
44
|
+
|
45
|
+
- samvera/rubocop
|
46
|
+
|
47
|
+
- samvera/parallel_rspec
|
48
|
+
|
49
|
+
workflows:
|
50
|
+
ci:
|
51
|
+
jobs:
|
52
|
+
- bundle_and_test:
|
53
|
+
name: "ruby2-6_rails5-2"
|
54
|
+
ruby_version: "2.6.3"
|
55
|
+
- bundle_and_test:
|
56
|
+
name: "ruby2-5_rails5-2"
|
57
|
+
ruby_version: "2.5.5"
|
58
|
+
- bundle_and_test:
|
59
|
+
name: "ruby2-4_rails5-2"
|
60
|
+
ruby_version: "2.4.6"
|
61
|
+
- bundle_and_test:
|
62
|
+
name: "ruby2-6_rails5-1"
|
63
|
+
ruby_version: "2.6.3"
|
64
|
+
rails_version: "5.1.7"
|
65
|
+
- bundle_and_test:
|
66
|
+
name: "ruby2-5_rails5-1"
|
67
|
+
ruby_version: "2.5.5"
|
68
|
+
rails_version: "5.1.7"
|
69
|
+
- bundle_and_test:
|
70
|
+
name: "ruby2-4_rails5-1"
|
71
|
+
ruby_version: "2.4.6"
|
72
|
+
rails_version: "5.1.7"
|
data/.rubocop.yml
CHANGED
@@ -1,75 +1,13 @@
|
|
1
|
-
|
1
|
+
inherit_gem:
|
2
|
+
bixby: bixby_default.yml
|
3
|
+
|
4
|
+
inherit_from: .rubocop_todo.yml
|
5
|
+
|
2
6
|
|
3
7
|
AllCops:
|
8
|
+
TargetRubyVersion: 2.4
|
4
9
|
DisplayCopNames: true
|
5
|
-
Include:
|
6
|
-
- '**/Rakefile'
|
7
10
|
Exclude:
|
8
|
-
- 'spec/**/*'
|
9
11
|
- 'vendor/**/*'
|
10
|
-
|
11
|
-
|
12
|
-
Enabled: True
|
13
|
-
|
14
|
-
Metrics/LineLength:
|
15
|
-
Enabled: false
|
16
|
-
|
17
|
-
Metrics/AbcSize:
|
18
|
-
Enabled: false
|
19
|
-
|
20
|
-
Metrics/MethodLength:
|
21
|
-
Exclude:
|
22
|
-
- 'lib/active_encode/engine_adapters/*'
|
23
|
-
|
24
|
-
Metrics/ClassLength:
|
25
|
-
Exclude:
|
26
|
-
- 'lib/active_encode/engine_adapters/*'
|
27
|
-
|
28
|
-
Metrics/CyclomaticComplexity:
|
29
|
-
Exclude:
|
30
|
-
- 'lib/active_encode/engine_adapters/*'
|
31
|
-
|
32
|
-
Style/IndentationConsistency:
|
33
|
-
EnforcedStyle: rails
|
34
|
-
|
35
|
-
Style/CollectionMethods:
|
36
|
-
PreferredMethods:
|
37
|
-
collect: 'map'
|
38
|
-
collect!: 'map!'
|
39
|
-
inject: 'reduce'
|
40
|
-
detect: 'find'
|
41
|
-
find_all: 'select'
|
42
|
-
|
43
|
-
Style/FileName: # https://github.com/bbatsov/rubocop/issues/2973
|
44
|
-
Exclude:
|
45
|
-
- 'Gemfile'
|
46
|
-
|
47
|
-
Style/WordArray:
|
48
|
-
Enabled: false
|
49
|
-
|
50
|
-
Style/RegexpLiteral:
|
51
|
-
Enabled: false
|
52
|
-
|
53
|
-
Style/StringLiterals:
|
54
|
-
Enabled: false
|
55
|
-
|
56
|
-
Style/ClassAndModuleChildren:
|
57
|
-
Enabled: false
|
58
|
-
|
59
|
-
Style/Documentation:
|
60
|
-
Enabled: false
|
61
|
-
|
62
|
-
RSpec/ExampleWording:
|
63
|
-
CustomTransform:
|
64
|
-
be: is
|
65
|
-
have: has
|
66
|
-
not: does not
|
67
|
-
NOT: does NOT
|
68
|
-
IgnoredWords:
|
69
|
-
- only
|
70
|
-
|
71
|
-
RSpec/FilePath:
|
72
|
-
Enabled: false
|
73
|
-
|
74
|
-
RSpec/InstanceVariable:
|
75
|
-
Enabled: false
|
12
|
+
Include:
|
13
|
+
- '**/Rakefile'
|
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
Bundler/DuplicatedGem:
|
2
|
+
Enabled: false
|
3
|
+
|
4
|
+
Metrics/AbcSize:
|
5
|
+
Exclude:
|
6
|
+
- 'lib/active_encode/engine_adapters/*'
|
7
|
+
|
8
|
+
Metrics/BlockLength:
|
9
|
+
Exclude:
|
10
|
+
- 'spec/**/*'
|
11
|
+
|
12
|
+
Metrics/BlockNesting:
|
13
|
+
Exclude:
|
14
|
+
- 'lib/file_locator.rb'
|
15
|
+
|
16
|
+
Metrics/ClassLength:
|
17
|
+
Exclude:
|
18
|
+
- 'lib/active_encode/engine_adapters/*'
|
19
|
+
|
20
|
+
Metrics/CyclomaticComplexity:
|
21
|
+
Exclude:
|
22
|
+
- 'lib/active_encode/engine_adapters/ffmpeg_adapter.rb'
|
23
|
+
- 'lib/active_encode/engine_adapters/zencoder_adapter.rb'
|
24
|
+
|
25
|
+
Metrics/LineLength:
|
26
|
+
Exclude:
|
27
|
+
- 'lib/active_encode/engine_adapters/matterhorn_adapter.rb'
|
28
|
+
- 'spec/**/*'
|
29
|
+
|
30
|
+
Metrics/MethodLength:
|
31
|
+
Exclude:
|
32
|
+
- 'lib/active_encode/engine_adapters/*'
|
33
|
+
- 'lib/file_locator.rb'
|
34
|
+
|
35
|
+
Metrics/PerceivedComplexity:
|
36
|
+
Exclude:
|
37
|
+
- 'lib/active_encode/engine_adapters/ffmpeg_adapter.rb'
|
38
|
+
- 'lib/file_locator.rb'
|
39
|
+
|
40
|
+
RSpec/AnyInstance:
|
41
|
+
Exclude:
|
42
|
+
- 'spec/integration/ffmpeg_adapter_spec.rb'
|
43
|
+
|
44
|
+
RSpec/ExampleLength:
|
45
|
+
Enabled: false
|
46
|
+
|
47
|
+
RSpec/InstanceVariable:
|
48
|
+
Exclude:
|
49
|
+
- 'spec/integration/ffmpeg_adapter_spec.rb'
|
50
|
+
|
51
|
+
RSpec/MessageSpies:
|
52
|
+
Exclude:
|
53
|
+
- 'spec/integration/matterhorn_adapter_spec.rb'
|
54
|
+
- 'spec/integration/ffmpeg_adapter_spec.rb'
|
55
|
+
|
56
|
+
RSpec/NamedSubject:
|
57
|
+
Enabled: false
|
58
|
+
|
59
|
+
RSpec/VerifiedDoubles:
|
60
|
+
Enabled: false
|
61
|
+
|
62
|
+
Style/GuardClause:
|
63
|
+
Exclude:
|
64
|
+
- 'lib/file_locator.rb'
|
data/Gemfile
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
source 'https://rubygems.org'
|
2
3
|
|
3
4
|
# Specify your gem's dependencies in hydra-transcoder.gemspec
|
4
5
|
gemspec
|
5
6
|
|
7
|
+
gem 'addressable'
|
6
8
|
gem 'aws-sdk'
|
7
9
|
gem 'byebug'
|
8
|
-
gem 'rubocop', require: false
|
9
|
-
gem 'rubocop-rspec', require: false
|
10
10
|
gem 'rubyhorn', git: "https://github.com/avalonmediasystem/rubyhorn.git"
|
11
11
|
gem 'shingoncoder'
|
12
12
|
gem 'zencoder'
|
@@ -37,9 +37,9 @@ else
|
|
37
37
|
|
38
38
|
case ENV['RAILS_VERSION']
|
39
39
|
when /^4.2/
|
40
|
+
gem 'coffee-rails', '~> 4.1.0'
|
40
41
|
gem 'responders', '~> 2.0'
|
41
42
|
gem 'sass-rails', '>= 5.0'
|
42
|
-
gem 'coffee-rails', '~> 4.1.0'
|
43
43
|
when /^4.[01]/
|
44
44
|
gem 'sass-rails', '< 5.0'
|
45
45
|
end
|
data/active_encode.gemspec
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
lib = File.expand_path('../lib', __FILE__)
|
4
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
@@ -10,7 +11,7 @@ Gem::Specification.new do |spec|
|
|
10
11
|
spec.authors = ["Michael Klein, Chris Colvard, Phuong Dinh"]
|
11
12
|
spec.email = ["mbklein@gmail.com, chris.colvard@gmail.com, phuongdh@gmail.com"]
|
12
13
|
spec.summary = 'Declare encode job classes that can be run by a variety of encoding services'
|
13
|
-
spec.description = 'This gem
|
14
|
+
spec.description = 'This gem provides an interface to transcoding services such as Ffmpeg, Amazon Elastic Transcoder, or Zencoder.'
|
14
15
|
spec.homepage = "https://github.com/samvera-labs/active_encode"
|
15
16
|
spec.license = "Apache-2.0"
|
16
17
|
|
@@ -22,6 +23,7 @@ Gem::Specification.new do |spec|
|
|
22
23
|
spec.add_dependency "rails"
|
23
24
|
|
24
25
|
spec.add_development_dependency "aws-sdk"
|
26
|
+
spec.add_development_dependency "bixby", '~> 1.0.0'
|
25
27
|
spec.add_development_dependency "bundler"
|
26
28
|
spec.add_development_dependency "coveralls"
|
27
29
|
spec.add_development_dependency "database_cleaner"
|
@@ -29,5 +31,6 @@ Gem::Specification.new do |spec|
|
|
29
31
|
spec.add_development_dependency "rake"
|
30
32
|
spec.add_development_dependency "rspec"
|
31
33
|
spec.add_development_dependency "rspec-its"
|
34
|
+
spec.add_development_dependency 'rspec_junit_formatter'
|
32
35
|
spec.add_development_dependency "rspec-rails"
|
33
36
|
end
|
data/lib/active_encode.rb
CHANGED
data/lib/active_encode/base.rb
CHANGED
data/lib/active_encode/core.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'active_support'
|
2
3
|
require 'active_encode/callbacks'
|
3
4
|
|
@@ -44,19 +45,19 @@ module ActiveEncode
|
|
44
45
|
end
|
45
46
|
|
46
47
|
def initialize(input_url, options = nil)
|
47
|
-
@input = Input.new.tap{ |input| input.url = input_url }
|
48
|
+
@input = Input.new.tap { |input| input.url = input_url }
|
48
49
|
@options = self.class.default_options(input_url).merge(Hash(options))
|
49
50
|
end
|
50
51
|
|
51
52
|
def create!
|
52
53
|
run_callbacks :create do
|
53
|
-
merge!(self.class.engine_adapter.create(
|
54
|
+
merge!(self.class.engine_adapter.create(input.url, options))
|
54
55
|
end
|
55
56
|
end
|
56
57
|
|
57
58
|
def cancel!
|
58
59
|
run_callbacks :cancel do
|
59
|
-
merge!(self.class.engine_adapter.cancel(
|
60
|
+
merge!(self.class.engine_adapter.cancel(id))
|
60
61
|
end
|
61
62
|
end
|
62
63
|
|
data/lib/active_encode/engine.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveEncode
|
2
3
|
# == Active Encode adapters
|
3
4
|
#
|
@@ -14,7 +15,7 @@ module ActiveEncode
|
|
14
15
|
autoload :TestAdapter
|
15
16
|
autoload :FfmpegAdapter
|
16
17
|
|
17
|
-
ADAPTER = 'Adapter'
|
18
|
+
ADAPTER = 'Adapter'
|
18
19
|
private_constant :ADAPTER
|
19
20
|
|
20
21
|
class << self
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'addressable/uri'
|
2
3
|
require 'aws-sdk'
|
3
4
|
require 'file_locator'
|
@@ -5,11 +6,10 @@ require 'file_locator'
|
|
5
6
|
module ActiveEncode
|
6
7
|
module EngineAdapters
|
7
8
|
class ElasticTranscoderAdapter
|
8
|
-
|
9
9
|
JOB_STATES = {
|
10
10
|
"Submitted" => :running, "Progressing" => :running, "Canceled" => :cancelled,
|
11
11
|
"Error" => :failed, "Complete" => :completed
|
12
|
-
}
|
12
|
+
}.freeze
|
13
13
|
|
14
14
|
# Require options to include :pipeline_id, :masterfile_bucket and :outputs
|
15
15
|
# Example :outputs value:
|
@@ -29,7 +29,7 @@ module ActiveEncode
|
|
29
29
|
build_encode(job)
|
30
30
|
end
|
31
31
|
|
32
|
-
def find(id,
|
32
|
+
def find(id, _opts = {})
|
33
33
|
build_encode(get_job_details(id))
|
34
34
|
end
|
35
35
|
|
@@ -58,14 +58,14 @@ module ActiveEncode
|
|
58
58
|
return nil if job.nil?
|
59
59
|
encode = ActiveEncode::Base.new(convert_input(job), {})
|
60
60
|
encode.id = job.id
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
61
|
+
encode.state = JOB_STATES[job.status]
|
62
|
+
encode.current_operations = []
|
63
|
+
encode.percent_complete = convert_percent_complete(job)
|
64
|
+
encode.created_at = convert_time(job.timing["submit_time_millis"])
|
65
|
+
encode.updated_at = convert_time(job.timing["finish_time_millis"]) || convert_time(job.timing["start_time_millis"]) || encode.created_at
|
66
66
|
|
67
|
-
|
68
|
-
|
67
|
+
encode.output = convert_output(job)
|
68
|
+
encode.errors = job.outputs.select { |o| o.status == "Error" }.collect(&:status_detail).compact
|
69
69
|
|
70
70
|
tech_md = convert_tech_metadata(job.input.detected_properties)
|
71
71
|
[:width, :height, :frame_rate, :duration, :file_size].each do |field|
|
@@ -82,7 +82,7 @@ module ActiveEncode
|
|
82
82
|
|
83
83
|
def convert_time(time_millis)
|
84
84
|
return nil if time_millis.nil?
|
85
|
-
Time.at(time_millis / 1000)
|
85
|
+
Time.at(time_millis / 1000).utc
|
86
86
|
end
|
87
87
|
|
88
88
|
def convert_bitrate(rate)
|
@@ -124,35 +124,35 @@ module ActiveEncode
|
|
124
124
|
job.input
|
125
125
|
end
|
126
126
|
|
127
|
-
def copy_to_input_bucket
|
127
|
+
def copy_to_input_bucket(input_url, bucket)
|
128
128
|
case Addressable::URI.parse(input_url).scheme
|
129
|
-
when nil,'file'
|
129
|
+
when nil, 'file'
|
130
130
|
upload_to_s3 input_url, bucket
|
131
131
|
when 's3'
|
132
132
|
check_s3_bucket input_url, bucket
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
136
|
-
def check_s3_bucket
|
136
|
+
def check_s3_bucket(input_url, source_bucket)
|
137
137
|
# logger.info("Checking `#{input_url}'")
|
138
138
|
s3_object = FileLocator::S3File.new(input_url).object
|
139
139
|
if s3_object.bucket_name == source_bucket
|
140
140
|
# logger.info("Already in bucket `#{source_bucket}'")
|
141
141
|
s3_object.key
|
142
142
|
else
|
143
|
-
s3_key = File.join(SecureRandom.uuid,s3_object.key)
|
143
|
+
s3_key = File.join(SecureRandom.uuid, s3_object.key)
|
144
144
|
# logger.info("Copying to `#{source_bucket}/#{input_url}'")
|
145
145
|
target = Aws::S3::Object.new(bucket_name: source_bucket, key: input_url)
|
146
|
-
target.copy_from(s3_object, multipart_copy: s3_object.size >
|
146
|
+
target.copy_from(s3_object, multipart_copy: s3_object.size > 15_728_640) # 15.megabytes
|
147
147
|
s3_key
|
148
148
|
end
|
149
149
|
end
|
150
150
|
|
151
|
-
def upload_to_s3
|
152
|
-
original_input = input_url
|
151
|
+
def upload_to_s3(input_url, source_bucket)
|
152
|
+
# original_input = input_url
|
153
153
|
bucket = Aws::S3::Resource.new(client: s3client).bucket(source_bucket)
|
154
154
|
filename = FileLocator.new(input_url).location
|
155
|
-
s3_key = File.join(SecureRandom.uuid,File.basename(filename))
|
155
|
+
s3_key = File.join(SecureRandom.uuid, File.basename(filename))
|
156
156
|
# logger.info("Copying `#{original_input}' to `#{source_bucket}/#{input_url}'")
|
157
157
|
obj = bucket.object(s3_key)
|
158
158
|
obj.upload_file filename
|
@@ -169,12 +169,13 @@ module ActiveEncode
|
|
169
169
|
job.outputs.collect do |joutput|
|
170
170
|
preset = read_preset(joutput.preset_id)
|
171
171
|
extension = preset.container == 'ts' ? '.m3u8' : ''
|
172
|
-
|
172
|
+
additional_metadata = {
|
173
173
|
managed: false,
|
174
174
|
id: joutput.id,
|
175
175
|
label: joutput.key.split("/", 2).first,
|
176
176
|
url: "s3://#{pipeline.output_bucket}/#{job.output_key_prefix}#{joutput.key}#{extension}"
|
177
|
-
}
|
177
|
+
}
|
178
|
+
tech_md = convert_tech_metadata(joutput, preset).merge(additional_metadata)
|
178
179
|
|
179
180
|
output = ActiveEncode::Output.new
|
180
181
|
output.state = convert_state(joutput)
|
@@ -194,7 +195,7 @@ module ActiveEncode
|
|
194
195
|
job.outputs.select { |o| o.status == "Error" }.collect(&:status_detail).compact
|
195
196
|
end
|
196
197
|
|
197
|
-
def convert_tech_metadata(props, preset=nil)
|
198
|
+
def convert_tech_metadata(props, preset = nil)
|
198
199
|
return {} if props.nil? || props.empty?
|
199
200
|
metadata_fields = {
|
200
201
|
file_size: { key: :file_size, method: :itself },
|
@@ -216,13 +217,13 @@ module ActiveEncode
|
|
216
217
|
unless preset.nil?
|
217
218
|
audio = preset.audio
|
218
219
|
video = preset.video
|
219
|
-
metadata.merge!(
|
220
|
+
metadata.merge!(
|
220
221
|
audio_codec: audio&.codec,
|
221
222
|
audio_channels: audio&.channels,
|
222
223
|
audio_bitrate: convert_bitrate(audio&.bit_rate),
|
223
224
|
video_codec: video&.codec,
|
224
225
|
video_bitrate: convert_bitrate(video&.bit_rate)
|
225
|
-
|
226
|
+
)
|
226
227
|
end
|
227
228
|
|
228
229
|
metadata
|