uencode 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +6 -2
- data/lib/uencode/elements.rb +33 -0
- data/lib/uencode/version.rb +1 -1
- data/spec/elements_spec.rb +33 -0
- data/spec/fixtures/configuration.yaml +23 -0
- data/spec/spec_helper.rb +0 -1
- data/uencode.gemspec +1 -0
- metadata +30 -11
data/README.md
CHANGED
@@ -33,7 +33,7 @@ capture = UEncode::CaptureOutput.new :destination => "http://whatever.com/foo.zi
|
|
33
33
|
job.add_capture capture
|
34
34
|
|
35
35
|
request = UEncode::Request.new job
|
36
|
-
|
36
|
+
|
37
37
|
response = request.send
|
38
38
|
|
39
39
|
puts response.code # => 'Ok'
|
@@ -46,12 +46,16 @@ puts response.userdata # => 'This is a simple test'
|
|
46
46
|
|
47
47
|
Currently all the uEncode API parameters are supported (or so I think :)
|
48
48
|
|
49
|
-
Currently the gem does not validate parameters
|
49
|
+
Currently the gem does not validate parameters values, so pay attention to the API docs.
|
50
50
|
|
51
51
|
You can see the whole list of accepted parameters in the [uEncode API documentation](http://www.uencode.com/api/300#response_codes).
|
52
52
|
|
53
53
|
For the UEncode classes that map to each complex API parameters (like Crop, Size, FrameRate, etc) take a look at the spec file at /spec/elements_spec.rb or read the docs.
|
54
54
|
|
55
|
+
## Credits
|
56
|
+
|
57
|
+
This gem was created during my work to integrate the uEncode API in our application at [DailyDigital](http://www.dailydigital.com). Thanks for letting me open source it!
|
58
|
+
|
55
59
|
## Running the specs
|
56
60
|
|
57
61
|
* bundle install
|
data/lib/uencode/elements.rb
CHANGED
@@ -111,11 +111,40 @@ module UEncode
|
|
111
111
|
|
112
112
|
# Medium is a single video to transcode
|
113
113
|
class Medium
|
114
|
+
attr_reader :video_config, :audio_config
|
115
|
+
|
114
116
|
def initialize
|
115
117
|
@video_config = VideoConfig.new
|
116
118
|
@audio_config = AudioConfig.new
|
117
119
|
end
|
118
120
|
|
121
|
+
# Configures the transcoding using a nested hash with the following format:
|
122
|
+
#
|
123
|
+
# config = {"video" => { ... }, "audio" => { ... }
|
124
|
+
#
|
125
|
+
# The keys for the "video" hash can be any of the following: bitrate, codec, cbr, crop,
|
126
|
+
# deinterlace, framerate, height, keyframe_interval, maxbitrate, par, profile, passes,
|
127
|
+
# stretch, width.
|
128
|
+
#
|
129
|
+
# The "framerate" and "par" values must be also hashes, with the following format:
|
130
|
+
#
|
131
|
+
# {"numerator" => 10, "denominator" => 11}
|
132
|
+
#
|
133
|
+
# The keys for the "audio" hash can be any of the following:
|
134
|
+
# codec, bitrate, channels, samplerate.
|
135
|
+
#
|
136
|
+
def configure(hash)
|
137
|
+
video = hash["video"]
|
138
|
+
audio = hash["audio"]
|
139
|
+
configure_video do |c|
|
140
|
+
video.each_pair { |key, value| c.send("#{key}=", value) }
|
141
|
+
end
|
142
|
+
|
143
|
+
configure_audio do |c|
|
144
|
+
audio.each_pair { |key, value| c.send("#{key}=", value) }
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
119
148
|
def configure_video
|
120
149
|
yield @video_config
|
121
150
|
end
|
@@ -186,6 +215,10 @@ module UEncode
|
|
186
215
|
|
187
216
|
include Enumerable
|
188
217
|
|
218
|
+
def self.from_hash(hash)
|
219
|
+
new({})
|
220
|
+
end
|
221
|
+
|
189
222
|
def initialize(options)
|
190
223
|
@video_output = VideoOutput.new options[:video_output] || {}
|
191
224
|
@captures = []
|
data/lib/uencode/version.rb
CHANGED
data/spec/elements_spec.rb
CHANGED
@@ -31,6 +31,9 @@ describe UEncode::Medium do
|
|
31
31
|
|
32
32
|
describe "#configure_video" do
|
33
33
|
let(:medium) { UEncode::Medium.new }
|
34
|
+
let(:config) { YAML::load_file("spec/fixtures/configuration.yaml") }
|
35
|
+
let(:video_config) { config["video"] }
|
36
|
+
let(:audio_config) { config["audio"] }
|
34
37
|
|
35
38
|
it { medium.video.bitrate.should == 10000 }
|
36
39
|
it { medium.video.codec.should == "mp4" }
|
@@ -46,6 +49,36 @@ describe UEncode::Medium do
|
|
46
49
|
it { medium.video.passes.should == 1 }
|
47
50
|
it { medium.video.stretch.should == false }
|
48
51
|
it { medium.video.width.should == 400 }
|
52
|
+
|
53
|
+
context "from a hash (video parameters)" do
|
54
|
+
before { medium.configure config }
|
55
|
+
subject { medium.video_config }
|
56
|
+
|
57
|
+
its(:bitrate) { should == video_config["bitrate"] }
|
58
|
+
its(:codec) { should == video_config["codec"] }
|
59
|
+
its(:cbr) { should == video_config["cbr"] }
|
60
|
+
its(:crop) { should == video_config["crop"] }
|
61
|
+
its(:deinterlace) { should == video_config["deinterlace"] }
|
62
|
+
its(:framerate) { should == video_config["framerate"] }
|
63
|
+
its(:height) { should == video_config["height"] }
|
64
|
+
its(:keyframe_interval) { should == video_config["keyframe_interval"] }
|
65
|
+
its(:maxbitrate) { should == video_config["maxbitrate"] }
|
66
|
+
its(:par) { should == video_config["par"] }
|
67
|
+
its(:profile) { should == video_config["profile"] }
|
68
|
+
its(:passes) { should == video_config["passes"] }
|
69
|
+
its(:stretch) { should == video_config["stretch"] }
|
70
|
+
its(:width) { should == video_config["width"] }
|
71
|
+
end
|
72
|
+
|
73
|
+
context "from a hash (audio parameters)" do
|
74
|
+
before { medium.configure config }
|
75
|
+
subject { medium.audio_config }
|
76
|
+
|
77
|
+
its(:codec) { should == audio_config["codec"] }
|
78
|
+
its(:bitrate) { should == audio_config["bitrate"] }
|
79
|
+
its(:channels) { should == audio_config["channels"] }
|
80
|
+
its(:samplerate) { should == audio_config["samplerate"] }
|
81
|
+
end
|
49
82
|
end
|
50
83
|
|
51
84
|
describe "#configure_audio" do
|
@@ -0,0 +1,23 @@
|
|
1
|
+
video:
|
2
|
+
bitrate: 4500000
|
3
|
+
codec: "mp4"
|
4
|
+
width: 1920
|
5
|
+
height: 1080
|
6
|
+
passes: 1
|
7
|
+
maxbitrate: 2000000
|
8
|
+
deinterlace: false
|
9
|
+
cbr: false
|
10
|
+
stretch: false
|
11
|
+
profile: "baseline"
|
12
|
+
framerate:
|
13
|
+
numerator: 30000
|
14
|
+
denominator: 1001
|
15
|
+
par:
|
16
|
+
numerator: 1
|
17
|
+
denominator: 1
|
18
|
+
keyframe_interval: 60
|
19
|
+
audio:
|
20
|
+
codec: "aac"
|
21
|
+
bitrate: 256000
|
22
|
+
channels: 2
|
23
|
+
samplerate: 44100
|
data/spec/spec_helper.rb
CHANGED
data/uencode.gemspec
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: uencode
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- "C\xC3\xA1ssio Marques"
|
@@ -10,12 +10,11 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-07-07 00:00:00 -03:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rspec
|
18
|
-
prerelease: false
|
19
18
|
requirement: &id001 !ruby/object:Gem::Requirement
|
20
19
|
none: false
|
21
20
|
requirements:
|
@@ -23,10 +22,10 @@ dependencies:
|
|
23
22
|
- !ruby/object:Gem::Version
|
24
23
|
version: 2.6.0
|
25
24
|
type: :development
|
25
|
+
prerelease: false
|
26
26
|
version_requirements: *id001
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: vcr
|
29
|
-
prerelease: false
|
30
29
|
requirement: &id002 !ruby/object:Gem::Requirement
|
31
30
|
none: false
|
32
31
|
requirements:
|
@@ -34,10 +33,10 @@ dependencies:
|
|
34
33
|
- !ruby/object:Gem::Version
|
35
34
|
version: 1.9.0
|
36
35
|
type: :development
|
36
|
+
prerelease: false
|
37
37
|
version_requirements: *id002
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: guard
|
40
|
-
prerelease: false
|
41
40
|
requirement: &id003 !ruby/object:Gem::Requirement
|
42
41
|
none: false
|
43
42
|
requirements:
|
@@ -45,10 +44,10 @@ dependencies:
|
|
45
44
|
- !ruby/object:Gem::Version
|
46
45
|
version: "0"
|
47
46
|
type: :development
|
47
|
+
prerelease: false
|
48
48
|
version_requirements: *id003
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: guard-rspec
|
51
|
-
prerelease: false
|
52
51
|
requirement: &id004 !ruby/object:Gem::Requirement
|
53
52
|
none: false
|
54
53
|
requirements:
|
@@ -56,10 +55,10 @@ dependencies:
|
|
56
55
|
- !ruby/object:Gem::Version
|
57
56
|
version: "0"
|
58
57
|
type: :development
|
58
|
+
prerelease: false
|
59
59
|
version_requirements: *id004
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: growl
|
62
|
-
prerelease: false
|
63
62
|
requirement: &id005 !ruby/object:Gem::Requirement
|
64
63
|
none: false
|
65
64
|
requirements:
|
@@ -67,10 +66,10 @@ dependencies:
|
|
67
66
|
- !ruby/object:Gem::Version
|
68
67
|
version: "0"
|
69
68
|
type: :development
|
69
|
+
prerelease: false
|
70
70
|
version_requirements: *id005
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: rb-fsevent
|
73
|
-
prerelease: false
|
74
73
|
requirement: &id006 !ruby/object:Gem::Requirement
|
75
74
|
none: false
|
76
75
|
requirements:
|
@@ -78,10 +77,10 @@ dependencies:
|
|
78
77
|
- !ruby/object:Gem::Version
|
79
78
|
version: "0"
|
80
79
|
type: :development
|
80
|
+
prerelease: false
|
81
81
|
version_requirements: *id006
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: webmock
|
84
|
-
prerelease: false
|
85
84
|
requirement: &id007 !ruby/object:Gem::Requirement
|
86
85
|
none: false
|
87
86
|
requirements:
|
@@ -89,10 +88,10 @@ dependencies:
|
|
89
88
|
- !ruby/object:Gem::Version
|
90
89
|
version: "0"
|
91
90
|
type: :development
|
91
|
+
prerelease: false
|
92
92
|
version_requirements: *id007
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
94
|
name: nokogiri
|
95
|
-
prerelease: false
|
96
95
|
requirement: &id008 !ruby/object:Gem::Requirement
|
97
96
|
none: false
|
98
97
|
requirements:
|
@@ -100,10 +99,10 @@ dependencies:
|
|
100
99
|
- !ruby/object:Gem::Version
|
101
100
|
version: 1.4.4
|
102
101
|
type: :runtime
|
102
|
+
prerelease: false
|
103
103
|
version_requirements: *id008
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: httparty
|
106
|
-
prerelease: false
|
107
106
|
requirement: &id009 !ruby/object:Gem::Requirement
|
108
107
|
none: false
|
109
108
|
requirements:
|
@@ -111,7 +110,19 @@ dependencies:
|
|
111
110
|
- !ruby/object:Gem::Version
|
112
111
|
version: "0"
|
113
112
|
type: :runtime
|
113
|
+
prerelease: false
|
114
114
|
version_requirements: *id009
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: rake
|
117
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
118
|
+
none: false
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: "0"
|
123
|
+
type: :runtime
|
124
|
+
prerelease: false
|
125
|
+
version_requirements: *id010
|
115
126
|
description: UEncode API client
|
116
127
|
email:
|
117
128
|
- cassiommc@gmail.com
|
@@ -134,6 +145,7 @@ files:
|
|
134
145
|
- lib/uencode/response.rb
|
135
146
|
- lib/uencode/version.rb
|
136
147
|
- spec/elements_spec.rb
|
148
|
+
- spec/fixtures/configuration.yaml
|
137
149
|
- spec/fixtures/job_with_one_video_and_no_capture.yml
|
138
150
|
- spec/request_spec.rb
|
139
151
|
- spec/response_spec.rb
|
@@ -154,12 +166,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
154
166
|
requirements:
|
155
167
|
- - ">="
|
156
168
|
- !ruby/object:Gem::Version
|
169
|
+
hash: 2924149938077751902
|
170
|
+
segments:
|
171
|
+
- 0
|
157
172
|
version: "0"
|
158
173
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
174
|
none: false
|
160
175
|
requirements:
|
161
176
|
- - ">="
|
162
177
|
- !ruby/object:Gem::Version
|
178
|
+
hash: 2924149938077751902
|
179
|
+
segments:
|
180
|
+
- 0
|
163
181
|
version: "0"
|
164
182
|
requirements: []
|
165
183
|
|
@@ -170,6 +188,7 @@ specification_version: 3
|
|
170
188
|
summary: Simple UEncode API client written in Ruby
|
171
189
|
test_files:
|
172
190
|
- spec/elements_spec.rb
|
191
|
+
- spec/fixtures/configuration.yaml
|
173
192
|
- spec/fixtures/job_with_one_video_and_no_capture.yml
|
174
193
|
- spec/request_spec.rb
|
175
194
|
- spec/response_spec.rb
|