enigmamachine 0.4.3 → 0.5.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.
- data/Rakefile +6 -5
- data/VERSION +1 -1
- data/bin/enigmamachine +1 -1
- data/enigmamachine.gemspec +24 -21
- data/lib/enigmamachine.rb +9 -0
- data/lib/enigmamachine/encoding_queue.rb +2 -1
- data/lib/enigmamachine/models/encoder.rb +5 -9
- data/lib/enigmamachine/models/video.rb +31 -0
- data/lib/enigmamachine/views/videos/video.erb +6 -1
- data/lib/generators/config.yml +1 -1
- data/test/support/blueprints.rb +3 -3
- data/test/test_video.rb +53 -6
- metadata +39 -45
data/Rakefile
CHANGED
@@ -9,14 +9,15 @@ begin
|
|
9
9
|
gem.description = %Q{A RESTful video encoder which you can use as either a front-end to ffmpeg or headless on a server.}
|
10
10
|
gem.email = "dave@caprica"
|
11
11
|
gem.homepage = "http://github.com/futurechimp/enigmamachine"
|
12
|
-
gem.authors = ["Dave Hrycyszyn"]
|
12
|
+
gem.authors = ["Dave Hrycyszyn", "Dmitry Brazhkin"]
|
13
13
|
gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
|
14
|
-
gem.add_dependency "data_mapper", "
|
15
|
-
gem.add_dependency "
|
16
|
-
gem.add_dependency "
|
14
|
+
gem.add_dependency "data_mapper", ">=1.0.2"
|
15
|
+
gem.add_dependency "dm-sqlite-adapter", ">=1.0.2"
|
16
|
+
gem.add_dependency "eventmachine", ">=0.12.10"
|
17
17
|
gem.add_dependency "rack-flash"
|
18
18
|
gem.add_dependency "ruby-debug"
|
19
|
-
gem.add_dependency "sinatra", "
|
19
|
+
gem.add_dependency "sinatra", ">=1.0.0"
|
20
|
+
gem.add_dependency "streamio-ffmpeg", ">=0.7.3"
|
20
21
|
gem.add_dependency "thin"
|
21
22
|
|
22
23
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
data/bin/enigmamachine
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# Enigmamachine command line interface script.
|
4
4
|
# Run <tt>enigmamachine -h</tt> to get more usage.
|
5
|
-
require
|
5
|
+
require 'rubygems'
|
6
6
|
require 'thin'
|
7
7
|
|
8
8
|
rackup_file = "#{File.dirname(__FILE__)}/../lib/enigmamachine/config.ru"
|
data/enigmamachine.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{enigmamachine}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.5.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Dave Hrycyszyn"]
|
12
|
-
s.date = %q{2010-
|
11
|
+
s.authors = ["Dave Hrycyszyn", "Dmitry Brazhkin"]
|
12
|
+
s.date = %q{2010-10-04}
|
13
13
|
s.default_executable = %q{enigmamachine}
|
14
14
|
s.description = %q{A RESTful video encoder which you can use as either a front-end to ffmpeg or headless on a server.}
|
15
15
|
s.email = %q{dave@caprica}
|
@@ -76,48 +76,51 @@ Gem::Specification.new do |s|
|
|
76
76
|
s.homepage = %q{http://github.com/futurechimp/enigmamachine}
|
77
77
|
s.rdoc_options = ["--charset=UTF-8"]
|
78
78
|
s.require_paths = ["lib"]
|
79
|
-
s.rubygems_version = %q{1.3.
|
79
|
+
s.rubygems_version = %q{1.3.6}
|
80
80
|
s.summary = %q{A RESTful video encoder.}
|
81
81
|
s.test_files = [
|
82
|
-
"test/
|
83
|
-
"test/
|
84
|
-
"test/support/blueprints.rb",
|
82
|
+
"test/support/blueprints.rb",
|
83
|
+
"test/helper.rb",
|
85
84
|
"test/test_encoding_queue.rb",
|
85
|
+
"test/test_video.rb",
|
86
86
|
"test/test_encoder.rb",
|
87
|
-
"test/
|
87
|
+
"test/test_enigmamachine.rb"
|
88
88
|
]
|
89
89
|
|
90
90
|
if s.respond_to? :specification_version then
|
91
91
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
92
92
|
s.specification_version = 3
|
93
93
|
|
94
|
-
if Gem::Version.new(Gem::
|
94
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
95
95
|
s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
96
|
-
s.add_runtime_dependency(%q<data_mapper>, ["
|
97
|
-
s.add_runtime_dependency(%q<
|
98
|
-
s.add_runtime_dependency(%q<
|
96
|
+
s.add_runtime_dependency(%q<data_mapper>, [">= 1.0.2"])
|
97
|
+
s.add_runtime_dependency(%q<dm-sqlite-adapter>, [">= 1.0.2"])
|
98
|
+
s.add_runtime_dependency(%q<eventmachine>, [">= 0.12.10"])
|
99
99
|
s.add_runtime_dependency(%q<rack-flash>, [">= 0"])
|
100
100
|
s.add_runtime_dependency(%q<ruby-debug>, [">= 0"])
|
101
|
-
s.add_runtime_dependency(%q<sinatra>, ["
|
101
|
+
s.add_runtime_dependency(%q<sinatra>, [">= 1.0.0"])
|
102
|
+
s.add_runtime_dependency(%q<streamio-ffmpeg>, [">= 0.7.3"])
|
102
103
|
s.add_runtime_dependency(%q<thin>, [">= 0"])
|
103
104
|
else
|
104
105
|
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
105
|
-
s.add_dependency(%q<data_mapper>, ["
|
106
|
-
s.add_dependency(%q<
|
107
|
-
s.add_dependency(%q<
|
106
|
+
s.add_dependency(%q<data_mapper>, [">= 1.0.2"])
|
107
|
+
s.add_dependency(%q<dm-sqlite-adapter>, [">= 1.0.2"])
|
108
|
+
s.add_dependency(%q<eventmachine>, [">= 0.12.10"])
|
108
109
|
s.add_dependency(%q<rack-flash>, [">= 0"])
|
109
110
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
110
|
-
s.add_dependency(%q<sinatra>, ["
|
111
|
+
s.add_dependency(%q<sinatra>, [">= 1.0.0"])
|
112
|
+
s.add_dependency(%q<streamio-ffmpeg>, [">= 0.7.3"])
|
111
113
|
s.add_dependency(%q<thin>, [">= 0"])
|
112
114
|
end
|
113
115
|
else
|
114
116
|
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
115
|
-
s.add_dependency(%q<data_mapper>, ["
|
116
|
-
s.add_dependency(%q<
|
117
|
-
s.add_dependency(%q<
|
117
|
+
s.add_dependency(%q<data_mapper>, [">= 1.0.2"])
|
118
|
+
s.add_dependency(%q<dm-sqlite-adapter>, [">= 1.0.2"])
|
119
|
+
s.add_dependency(%q<eventmachine>, [">= 0.12.10"])
|
118
120
|
s.add_dependency(%q<rack-flash>, [">= 0"])
|
119
121
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
120
|
-
s.add_dependency(%q<sinatra>, ["
|
122
|
+
s.add_dependency(%q<sinatra>, [">= 1.0.0"])
|
123
|
+
s.add_dependency(%q<streamio-ffmpeg>, [">= 0.7.3"])
|
121
124
|
s.add_dependency(%q<thin>, [">= 0"])
|
122
125
|
end
|
123
126
|
end
|
data/lib/enigmamachine.rb
CHANGED
@@ -10,6 +10,7 @@ require 'dm-validations'
|
|
10
10
|
require 'dm-migrations'
|
11
11
|
require 'open3'
|
12
12
|
require 'logger'
|
13
|
+
require 'streamio-ffmpeg'
|
13
14
|
|
14
15
|
# Extensions to Sinatra
|
15
16
|
#
|
@@ -270,5 +271,13 @@ class EnigmaMachine < Sinatra::Base
|
|
270
271
|
end
|
271
272
|
end
|
272
273
|
|
274
|
+
# Deletes a video.
|
275
|
+
#
|
276
|
+
delete '/videos/:id' do |id|
|
277
|
+
@video = Video.get(id)
|
278
|
+
@video.destroy
|
279
|
+
redirect "/videos"
|
280
|
+
end
|
281
|
+
|
273
282
|
end
|
274
283
|
|
@@ -6,6 +6,7 @@ class EncodingQueue
|
|
6
6
|
# starts looking for unencoded videos.
|
7
7
|
#
|
8
8
|
def initialize
|
9
|
+
@threads = YAML.load_file(Dir.getwd + '/config.yml')['threads'] if @threads.nil?
|
9
10
|
EM.add_periodic_timer(5) {
|
10
11
|
encode_next_video
|
11
12
|
}
|
@@ -15,7 +16,7 @@ class EncodingQueue
|
|
15
16
|
# Gets the next unencoded Video from the database and starts encoding it.
|
16
17
|
#
|
17
18
|
def encode_next_video
|
18
|
-
if Video.unencoded.count > 0 && ::Video.encoding.count
|
19
|
+
if Video.unencoded.count > 0 && ::Video.encoding.count < @threads
|
19
20
|
video = Video.unencoded.first
|
20
21
|
begin
|
21
22
|
video.encoder.encode(video)
|
@@ -33,20 +33,16 @@ class Encoder
|
|
33
33
|
#
|
34
34
|
def ffmpeg(task, video)
|
35
35
|
current_task_index = encoding_tasks.index(task)
|
36
|
-
|
36
|
+
movie = FFMPEG::Movie.new(video.file)
|
37
37
|
encoding_operation = proc {
|
38
|
-
video.state
|
39
|
-
video.
|
40
|
-
|
41
|
-
while stderr.gets()
|
42
|
-
puts stderr.gets
|
43
|
-
end
|
38
|
+
video.update(:state => 'encoding')
|
39
|
+
movie.transcode(video.file + task.output_file_suffix, task.command) do |p|
|
40
|
+
puts p*100
|
44
41
|
end
|
45
42
|
}
|
46
43
|
completion_callback = proc {|result|
|
47
44
|
if task == encoding_tasks.last
|
48
|
-
video.state
|
49
|
-
video.save
|
45
|
+
video.update(:state => 'complete')
|
50
46
|
video.notify_complete
|
51
47
|
else
|
52
48
|
next_task_index = current_task_index + 1
|
@@ -16,8 +16,15 @@ class Video
|
|
16
16
|
property :encoder_id, Integer, :required => true
|
17
17
|
property :callback_url, String
|
18
18
|
|
19
|
+
validates_with_method :file, :method => :check_file
|
20
|
+
validates_uniqueness_of :file, :scope => :encoder_id,
|
21
|
+
:message => "Same file with same encoder already exists"
|
19
22
|
belongs_to :encoder
|
20
23
|
|
24
|
+
before :destroy, :check_destroy
|
25
|
+
|
26
|
+
default_scope(:default).update(:order => [:created_at.asc])
|
27
|
+
|
21
28
|
# Notifies a calling application that processing has completed by sending
|
22
29
|
# a GET request to the video's callback_url.
|
23
30
|
#
|
@@ -68,5 +75,29 @@ class Video
|
|
68
75
|
end
|
69
76
|
end
|
70
77
|
|
78
|
+
private
|
79
|
+
|
80
|
+
def check_file
|
81
|
+
return [false, "Give a file name, not nil"] if self.file.nil?
|
82
|
+
return [false, "Give a file name, not a blank string"] if self.file.to_s.empty?
|
83
|
+
return [false, "#{self.file} does not exist"] unless File.exist? self.file
|
84
|
+
return [false, "#{self.file} is a directory"] if File.directory? self.file
|
85
|
+
movie = FFMPEG::Movie.new(self.file)
|
86
|
+
return [false, "#{self.file} is not a media file"] unless movie.valid?
|
87
|
+
return true
|
88
|
+
end
|
89
|
+
|
90
|
+
def check_destroy
|
91
|
+
return true if (self.state != 'encoding')
|
92
|
+
encoder = Encoder.get(self.encoder_id)
|
93
|
+
return true if stop_encode
|
94
|
+
throw :halt
|
95
|
+
end
|
96
|
+
|
97
|
+
def stop_encode
|
98
|
+
return false
|
99
|
+
#TODO Kill the encoder process
|
100
|
+
end
|
101
|
+
|
71
102
|
end
|
72
103
|
|
@@ -1,6 +1,11 @@
|
|
1
1
|
<% video = videos_video %>
|
2
2
|
<li>
|
3
3
|
<strong><%= video.state %></strong> - <%=h video.file %> -
|
4
|
-
created at <%=h video.created_at.strftime("%m/%d/%Y at %H:%M:%S")
|
4
|
+
created at <%=h video.created_at.strftime("%m/%d/%Y at %H:%M:%S")%>
|
5
|
+
<form action="/videos/<%= video.id %>" method="POST">
|
6
|
+
<input name="_method" value="DELETE" type="hidden"/>
|
7
|
+
<input type="submit" value="Delete"/>
|
8
|
+
</form>
|
9
|
+
<br/>
|
5
10
|
</li>
|
6
11
|
|
data/lib/generators/config.yml
CHANGED
data/test/support/blueprints.rb
CHANGED
@@ -3,7 +3,7 @@ require 'faker'
|
|
3
3
|
require 'sham'
|
4
4
|
|
5
5
|
Encoder.blueprint do
|
6
|
-
name {
|
6
|
+
name { Faker::Name.name }
|
7
7
|
end
|
8
8
|
|
9
9
|
Video.blueprint do
|
@@ -21,13 +21,13 @@ end
|
|
21
21
|
EncodingTask.blueprint do
|
22
22
|
name { "320x240 flv"}
|
23
23
|
output_file_suffix { ".foo.flv" }
|
24
|
-
command { "-ss 00:00:02 -t 00:00:01 -vcodec mjpeg -vframes 1 -an -f rawvideo -s 180x136
|
24
|
+
command { "-ss 00:00:02 -t 00:00:01 -vcodec mjpeg -vframes 1 -an -f rawvideo -s 180x136"}
|
25
25
|
end
|
26
26
|
|
27
27
|
EncodingTask.blueprint(:with_encoder) do
|
28
28
|
name { "320x240 flv"}
|
29
29
|
output_file_suffix { ".foo.flv" }
|
30
|
-
command { "-ss 00:00:02 -t 00:00:01 -vcodec mjpeg -vframes 1 -an -f rawvideo -s 180x136
|
30
|
+
command { "-ss 00:00:02 -t 00:00:01 -vcodec mjpeg -vframes 1 -an -f rawvideo -s 180x136"}
|
31
31
|
encoder
|
32
32
|
end
|
33
33
|
|
data/test/test_video.rb
CHANGED
@@ -5,12 +5,18 @@ class TestVideo < Test::Unit::TestCase
|
|
5
5
|
|
6
6
|
context "A Video instance" do
|
7
7
|
|
8
|
-
should "be invalid
|
8
|
+
should "be invalid with a bad file path" do
|
9
9
|
resource = ::Video.make
|
10
10
|
resource.file = ""
|
11
|
-
assert
|
11
|
+
assert(!resource.valid?, "must not be empty")
|
12
12
|
resource.file = nil
|
13
|
-
assert
|
13
|
+
assert(!resource.valid?, "must not be nil")
|
14
|
+
resource.file = "/fdfdf/sfdsdfsd/fse.gfr"
|
15
|
+
assert(!resource.valid?, "must be exist")
|
16
|
+
resource.file = File.dirname(__FILE__)
|
17
|
+
assert(!resource.valid?, "must not be a directory")
|
18
|
+
resource.file = __FILE__
|
19
|
+
assert(!resource.valid?, "must be media file")
|
14
20
|
end
|
15
21
|
|
16
22
|
should "be valid without a callback_url" do
|
@@ -27,9 +33,8 @@ class TestVideo < Test::Unit::TestCase
|
|
27
33
|
assert resource.valid?
|
28
34
|
end
|
29
35
|
|
30
|
-
should "be valid with a file path" do
|
36
|
+
should "be valid with a correct file path" do
|
31
37
|
resource = ::Video.make
|
32
|
-
resource.file = "foo.mpg"
|
33
38
|
assert resource.valid?
|
34
39
|
end
|
35
40
|
|
@@ -76,6 +81,48 @@ class TestVideo < Test::Unit::TestCase
|
|
76
81
|
end
|
77
82
|
end
|
78
83
|
|
84
|
+
context "when try to delete any kind of videos from base" do
|
85
|
+
setup do
|
86
|
+
clear_videos
|
87
|
+
5.times { Video.make }
|
88
|
+
end
|
89
|
+
|
90
|
+
should "be delete an unencoded videos" do
|
91
|
+
count = Video.unencoded.count
|
92
|
+
2.times { Video.unencoded.first.destroy }
|
93
|
+
assert_equal count - 2, Video.unencoded.count
|
94
|
+
end
|
95
|
+
|
96
|
+
should "be delete a completed videos" do
|
97
|
+
3.times { Video.unencoded.first.update(:state => "complete") }
|
98
|
+
count = Video.complete.count
|
99
|
+
2.times { Video.complete.first.destroy }
|
100
|
+
assert_equal count - 2, Video.complete.count
|
101
|
+
end
|
102
|
+
|
103
|
+
should "be delete a videos with errors" do
|
104
|
+
3.times { Video.unencoded.first.update(:state => "error") }
|
105
|
+
count = Video.with_errors.count
|
106
|
+
2.times { Video.with_errors.first.destroy }
|
107
|
+
assert_equal count - 2, Video.with_errors.count
|
108
|
+
end
|
109
|
+
|
110
|
+
should "not be delete an encoding videos" do
|
111
|
+
3.times { Video.unencoded.first.update(:state => "encoding") }
|
112
|
+
count = Video.encoding.count
|
113
|
+
2.times { Video.encoding.first.destroy }
|
114
|
+
assert_equal count, Video.encoding.count
|
115
|
+
end
|
116
|
+
|
117
|
+
should "be hard delete an encoding videos" do
|
118
|
+
3.times { Video.unencoded.first.update(:state => "encoding") }
|
119
|
+
count = Video.encoding.count
|
120
|
+
2.times { Video.encoding.first.destroy! }
|
121
|
+
assert_equal count - 2, Video.encoding.count
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
|
79
126
|
should "be able to grab all completed videos" do
|
80
127
|
assert Video.respond_to? "complete"
|
81
128
|
end
|
@@ -91,7 +138,7 @@ class TestVideo < Test::Unit::TestCase
|
|
91
138
|
end
|
92
139
|
|
93
140
|
def clear_videos
|
94
|
-
Video.all.each {|v| v.destroy }
|
141
|
+
Video.all.each {|v| v.destroy! }
|
95
142
|
end
|
96
143
|
|
97
144
|
end
|
metadata
CHANGED
@@ -1,32 +1,30 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: enigmamachine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 9
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
7
|
+
- 5
|
8
|
+
- 0
|
9
|
+
version: 0.5.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Dave Hrycyszyn
|
13
|
+
- Dmitry Brazhkin
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-10-04 00:00:00 +01:00
|
19
19
|
default_executable: enigmamachine
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: thoughtbot-shoulda
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
25
|
requirements:
|
27
26
|
- - ">="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
28
|
segments:
|
31
29
|
- 0
|
32
30
|
version: "0"
|
@@ -36,59 +34,51 @@ dependencies:
|
|
36
34
|
name: data_mapper
|
37
35
|
prerelease: false
|
38
36
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
37
|
requirements:
|
41
|
-
- - "
|
38
|
+
- - ">="
|
42
39
|
- !ruby/object:Gem::Version
|
43
|
-
hash: 23
|
44
40
|
segments:
|
45
41
|
- 1
|
46
42
|
- 0
|
47
|
-
-
|
48
|
-
version: 1.0.
|
43
|
+
- 2
|
44
|
+
version: 1.0.2
|
49
45
|
type: :runtime
|
50
46
|
version_requirements: *id002
|
51
47
|
- !ruby/object:Gem::Dependency
|
52
|
-
name:
|
48
|
+
name: dm-sqlite-adapter
|
53
49
|
prerelease: false
|
54
50
|
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
-
none: false
|
56
51
|
requirements:
|
57
|
-
- - "
|
52
|
+
- - ">="
|
58
53
|
- !ruby/object:Gem::Version
|
59
|
-
hash: 59
|
60
54
|
segments:
|
55
|
+
- 1
|
61
56
|
- 0
|
62
|
-
-
|
63
|
-
|
64
|
-
version: 0.12.10
|
57
|
+
- 2
|
58
|
+
version: 1.0.2
|
65
59
|
type: :runtime
|
66
60
|
version_requirements: *id003
|
67
61
|
- !ruby/object:Gem::Dependency
|
68
|
-
name:
|
62
|
+
name: eventmachine
|
69
63
|
prerelease: false
|
70
64
|
requirement: &id004 !ruby/object:Gem::Requirement
|
71
|
-
none: false
|
72
65
|
requirements:
|
73
|
-
- - "
|
66
|
+
- - ">="
|
74
67
|
- !ruby/object:Gem::Version
|
75
|
-
hash: 23
|
76
68
|
segments:
|
77
|
-
- 1
|
78
69
|
- 0
|
79
|
-
-
|
80
|
-
|
70
|
+
- 12
|
71
|
+
- 10
|
72
|
+
version: 0.12.10
|
81
73
|
type: :runtime
|
82
74
|
version_requirements: *id004
|
83
75
|
- !ruby/object:Gem::Dependency
|
84
76
|
name: rack-flash
|
85
77
|
prerelease: false
|
86
78
|
requirement: &id005 !ruby/object:Gem::Requirement
|
87
|
-
none: false
|
88
79
|
requirements:
|
89
80
|
- - ">="
|
90
81
|
- !ruby/object:Gem::Version
|
91
|
-
hash: 3
|
92
82
|
segments:
|
93
83
|
- 0
|
94
84
|
version: "0"
|
@@ -98,11 +88,9 @@ dependencies:
|
|
98
88
|
name: ruby-debug
|
99
89
|
prerelease: false
|
100
90
|
requirement: &id006 !ruby/object:Gem::Requirement
|
101
|
-
none: false
|
102
91
|
requirements:
|
103
92
|
- - ">="
|
104
93
|
- !ruby/object:Gem::Version
|
105
|
-
hash: 3
|
106
94
|
segments:
|
107
95
|
- 0
|
108
96
|
version: "0"
|
@@ -112,11 +100,9 @@ dependencies:
|
|
112
100
|
name: sinatra
|
113
101
|
prerelease: false
|
114
102
|
requirement: &id007 !ruby/object:Gem::Requirement
|
115
|
-
none: false
|
116
103
|
requirements:
|
117
|
-
- - "
|
104
|
+
- - ">="
|
118
105
|
- !ruby/object:Gem::Version
|
119
|
-
hash: 23
|
120
106
|
segments:
|
121
107
|
- 1
|
122
108
|
- 0
|
@@ -125,19 +111,31 @@ dependencies:
|
|
125
111
|
type: :runtime
|
126
112
|
version_requirements: *id007
|
127
113
|
- !ruby/object:Gem::Dependency
|
128
|
-
name:
|
114
|
+
name: streamio-ffmpeg
|
129
115
|
prerelease: false
|
130
116
|
requirement: &id008 !ruby/object:Gem::Requirement
|
131
|
-
none: false
|
132
117
|
requirements:
|
133
118
|
- - ">="
|
134
119
|
- !ruby/object:Gem::Version
|
135
|
-
hash: 3
|
136
120
|
segments:
|
137
121
|
- 0
|
138
|
-
|
122
|
+
- 7
|
123
|
+
- 3
|
124
|
+
version: 0.7.3
|
139
125
|
type: :runtime
|
140
126
|
version_requirements: *id008
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: thin
|
129
|
+
prerelease: false
|
130
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
segments:
|
135
|
+
- 0
|
136
|
+
version: "0"
|
137
|
+
type: :runtime
|
138
|
+
version_requirements: *id009
|
141
139
|
description: A RESTful video encoder which you can use as either a front-end to ffmpeg or headless on a server.
|
142
140
|
email: dave@caprica
|
143
141
|
executables:
|
@@ -211,34 +209,30 @@ rdoc_options:
|
|
211
209
|
require_paths:
|
212
210
|
- lib
|
213
211
|
required_ruby_version: !ruby/object:Gem::Requirement
|
214
|
-
none: false
|
215
212
|
requirements:
|
216
213
|
- - ">="
|
217
214
|
- !ruby/object:Gem::Version
|
218
|
-
hash: 3
|
219
215
|
segments:
|
220
216
|
- 0
|
221
217
|
version: "0"
|
222
218
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
223
|
-
none: false
|
224
219
|
requirements:
|
225
220
|
- - ">="
|
226
221
|
- !ruby/object:Gem::Version
|
227
|
-
hash: 3
|
228
222
|
segments:
|
229
223
|
- 0
|
230
224
|
version: "0"
|
231
225
|
requirements: []
|
232
226
|
|
233
227
|
rubyforge_project:
|
234
|
-
rubygems_version: 1.3.
|
228
|
+
rubygems_version: 1.3.6
|
235
229
|
signing_key:
|
236
230
|
specification_version: 3
|
237
231
|
summary: A RESTful video encoder.
|
238
232
|
test_files:
|
239
|
-
- test/helper.rb
|
240
|
-
- test/test_enigmamachine.rb
|
241
233
|
- test/support/blueprints.rb
|
234
|
+
- test/helper.rb
|
242
235
|
- test/test_encoding_queue.rb
|
243
|
-
- test/test_encoder.rb
|
244
236
|
- test/test_video.rb
|
237
|
+
- test/test_encoder.rb
|
238
|
+
- test/test_enigmamachine.rb
|