enigmamachine 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -3,19 +3,94 @@
3
3
  Enigmamachine is a video processor which queues and encodes videos according
4
4
  to target profiles that you define. Videos must be on a locally mounted
5
5
  filesystem. The processor takes the path to the video, and executes
6
- multiple ffmpeg commands on the video. There is a handy web interface for
6
+ one or more ffmpeg commands on the video. There is a handy web interface for
7
7
  defining encoding tasks, and a restful web service which takes encoding commands.
8
8
 
9
9
  Enigmamachine is written using Sinatra, Thin, and Eventmachine.
10
10
 
11
- == Current Status
11
+ == Why would you want one?
12
12
 
13
- The basic Sinatra application and the encoding queue work, but the app needs to
14
- be packaged up as a gem and all the niceties of running the server need to be
15
- made more convenient.
13
+ If you're not running a server, you probably don't need enigmamachine, because
14
+ there are already lots of great client-side batch processors for all kinds of
15
+ different operating systems. However, if you are running a web application,
16
+ and you want to process uploaded video, enigmamachine offers you a convenient
17
+ fire-and-forget video encoder.
18
+
19
+ The main problem with encoding video on a server is that it takes a really,
20
+ really long time - you don't want to do it within the scope of a single HTTP
21
+ request, because you want the user's browser to return to their control as
22
+ soon as the upload is finished. If the video took ten minutes to upload,
23
+ you don't want to keep their browser (and your webapp) busy for a
24
+ further ten minutes while the encoding happens.
25
+
26
+ The right way to deal with the uploaded video is to fire up a new thread which
27
+ can take over responsibility for encoding the video, while your web app goes
28
+ on its merry way. Unfortunately, this is difficult in some languages (PHP, for
29
+ example, doesn't have lightweight threading support), and even in languages
30
+ with good threading support it still sort of sucks. With Enigmamachine, all you
31
+ need to do to trigger encoding of a video is shoot off an HTTP request, and
32
+ everything else is handled for you.
33
+
34
+ == Using it
35
+
36
+ Once you've installed the gem (see below), you can do something like:
37
+
38
+ mkdir enigma
39
+ cd enigma
40
+ enigmamachine start # -d to daemonize
41
+
42
+ Then check it out in your browser, at http://localhost:2002.
43
+
44
+ Your application receives a video, and you do an HTTP call like:
45
+
46
+ POST http://localhost:2002/videos
47
+
48
+ with the params:
49
+
50
+ params["video"] # the full path to a file on your local filesystem
51
+ params["encoder_id"] # the id of an encoder defined in your database
52
+
53
+ The enigmamachine will run all encoding tasks on the video. If a new video is
54
+ uploaded while the first one is still encoding, it will be placed in a queue.
55
+ Videos are encoded sequentially as they arrive.
56
+
57
+ == Encoders and Encoding Tasks
58
+
59
+
60
+ TODO
61
+
62
+
63
+ == Installation
64
+
65
+ Enigmamachine is written in Ruby and uses the Sinatra web framework, the
66
+ Datamapper ORM library, and the Eventmachine event-processing library. If
67
+ you're not a Ruby person, you don't need to care about any of this.
68
+ Enigmamachine can be triggered by any language that can send a POST request -
69
+ so all you PHPistas, python-lovers, droopy-moustachists, or blue-suited
70
+ java types can all use it just as easy as us fashionable-haircut-language
71
+ people.
72
+
73
+ You can install it as a gem by doing:
74
+
75
+ gem install enigmamachine
76
+
77
+ If this command doesn't make any sense to you, it's because you don't know that
78
+ "gems" are ruby code packages, somewhat like apt-get except for ruby code only.
79
+ You can install rubygems on righteous operating systems by typing
80
+
81
+ apt-get install rubygems # as root
82
+
83
+ Then "gem install " should theoretically work. You'll also need a copy of
84
+ ffmpeg installed and available in your path.
85
+
86
+ == Status
87
+
88
+ This thing is still pre-release.
89
+
90
+ I'm just working on getting the gem dependencies correct, so you may need to
91
+ manually install a few things to get it to work. You'll also need a working
92
+ copy of ffmpeg available on your path.
16
93
 
17
- The biggest problem is that it was done on a whim (i.e. without test-first
18
- development) since it was just a sketch at first - this needs to be fixed.
19
94
 
20
95
  == Note on Patches/Pull Requests
21
96
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{enigmamachine}
8
- s.version = "0.1.3"
8
+ s.version = "0.1.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["dave"]
data/lib/enigmamachine.rb CHANGED
@@ -94,7 +94,7 @@ class EnigmaMachine < Sinatra::Base
94
94
  # Shows the enigma status page.
95
95
  #
96
96
  get '/' do
97
- @videos = Video.all(:limit => 50, :order => [:created_at.asc])
97
+ @videos = Video.all(:limit => 50, :order => [:created_at.desc])
98
98
  erb :index
99
99
  end
100
100
 
@@ -156,6 +156,8 @@ class EnigmaMachine < Sinatra::Base
156
156
  end
157
157
  end
158
158
 
159
+ # Deletes an encoder
160
+ #
159
161
  delete '/encoders/:id' do |id|
160
162
  @encoder = Encoder.get(id)
161
163
  @encoder.destroy!
@@ -1,13 +1,12 @@
1
1
  <div class="post">
2
- <h1 class="title">Your enigma machine</h1>
2
+ <h1 class="title">Your own enigma machine</h1>
3
3
  <div class="entry">
4
- <p>It is encoding some videos.</p>
5
- <% unless @videos.empty? %>
6
- <p>Here are the next videos which will be encoded:</p>
7
- <ul>
8
- <%= partial :'videos/video', :collection => @videos %>
9
- </ul>
10
- <% end %>
4
+ <% unless @videos.empty? %>
5
+ <p>Some recently added videos:</p>
6
+ <ul>
7
+ <%= partial :'videos/video', :collection => @videos %>
8
+ </ul>
9
+ <% end %>
11
10
  </div>
12
- </div>
13
-
11
+ </div>
12
+
@@ -1,6 +1,6 @@
1
1
  <% video = videos_video %>
2
2
  <li>
3
- <%=h video.file %> -
4
- created at <%=h video.created_at.strftime("%m/%d/%Y at %H:%M:%S")%><br/>
3
+ <strong><%= video.state %></strong> - <%=h video.file %> -
4
+ created at <%=h video.created_at.strftime("%m/%d/%Y at %H:%M:%S")%><br/>
5
5
  </li>
6
6
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enigmamachine
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 3
10
- version: 0.1.3
9
+ - 4
10
+ version: 0.1.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - dave