enigmamachine 0.1.4 → 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.
data/README.rdoc CHANGED
@@ -35,9 +35,9 @@ everything else is handled for you.
35
35
 
36
36
  Once you've installed the gem (see below), you can do something like:
37
37
 
38
- mkdir enigma
39
- cd enigma
40
- enigmamachine start # -d to daemonize
38
+ mkdir enigma
39
+ cd enigma
40
+ enigmamachine start # -d to daemonize
41
41
 
42
42
  Then check it out in your browser, at http://localhost:2002.
43
43
 
@@ -56,9 +56,55 @@ Videos are encoded sequentially as they arrive.
56
56
 
57
57
  == Encoders and Encoding Tasks
58
58
 
59
+ When you POST the location of a video to your enigmamachine, you need to tell
60
+ your EM what you want to do to the video. For example, you might want to take
61
+ an uploaded video and encode it as a 320x240 FLV video, with a 320x240 JPEG
62
+ thumbnail, and a 160x120 miniature thumbnail.
59
63
 
60
- TODO
64
+ To do this, you'd fire up your enigmamachine by typing
61
65
 
66
+ enigmamachine start
67
+
68
+ and go to http://localhost:2002/encoders. Clicking the "new encoder" link will
69
+ allow you to define a new encoder. Let's call it "Flash video with a couple
70
+ thumbnails", and save it.
71
+
72
+ So, now there's an encoder, but it won't do anything. Let's add some tasks,
73
+ by clicking on the "new task" link.
74
+
75
+ Give the first task a name, like _Encode a 320x240 flv at 25 frames per second_.
76
+
77
+ The output file suffix in this case will be *.flv*.
78
+
79
+ The encoding command you'll want to use would be
80
+ _-ab 128 -ar 22050 -b 500000 -r 25 -s 320x240_. This cryptic command string
81
+ tells ffmpeg to encode a Flash video at 320x240 pixels, with an audio bitrate
82
+ of 128kbps, an audio sample rate of 22.050khz, and a frame rate of 25fps. You
83
+ can find out what all the ffmpeg command line switches do by RTFMing at
84
+ http://www.ffmpeg.org/ffmpeg-doc.html
85
+
86
+ You would go on to define a couple more encoding tasks for your encoder.
87
+ Grabbing a screen frame in ffmpeg can be done with the following command-line
88
+ switches, which you can put into a task called, let's say,
89
+ _Grab a 320x240 JPEG thumbnail_:
90
+
91
+ -ss 00:00:05 -t 00:00:01 -vcodec mjpeg -vframes 1 -an -f rawvideo -s 320x240
92
+
93
+ Rinse and repeat for the 160x120 thumbnail.
94
+
95
+ == Security
96
+
97
+ Enigmamachine is set to bind by default to 127.0.0.1 (your system's loopback)
98
+ interface rather than on all network interfaces.
99
+
100
+ Making an enigmamachine available on an untrusted network (like
101
+ the Internet) would be a suicidal move on your part, since the code used to
102
+ talk to ffmpeg is a simple exec call and you'll be inviting everyone in the world
103
+ to execute commands on your server. Have fun with that.
104
+
105
+ If you don't know what any of this means, don't run it. I'm not responsible if
106
+ your enigmamachine screws up your system, allows people to exploit you, or
107
+ eats your mother.
62
108
 
63
109
  == Installation
64
110
 
@@ -76,12 +122,20 @@ You can install it as a gem by doing:
76
122
 
77
123
  If this command doesn't make any sense to you, it's because you don't know that
78
124
  "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
125
+ You can install rubygems, necessary sqlite headers, and a C compiler on
126
+ righteous operating systems by typing:
127
+
128
+ apt-get install rubygems ruby1.8-dev libopenssl-ruby build-essential libsqlite3-dev # as root
129
+
130
+ You'll need to add the following line to your ~/.bashrc file, as well:
80
131
 
81
- apt-get install rubygems # as root
132
+ export PATH=/var/lib/gems/1.8/bin:$PATH
82
133
 
83
- Then "gem install " should theoretically work. You'll also need a copy of
84
- ffmpeg installed and available in your path.
134
+ Then _gem install enigmamachine_ should theoretically work. You'll also need a copy of
135
+ ffmpeg installed and available in your path. On Mac OS X, rubygems should
136
+ already be installed, although you'll need to have a C compiler available
137
+ (make sure you install the developer tools that came with your operating
138
+ system).
85
139
 
86
140
  == Status
87
141
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 0.2.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{enigmamachine}
8
- s.version = "0.1.4"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["dave"]
12
- s.date = %q{2010-07-07}
12
+ s.date = %q{2010-07-08}
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}
data/lib/enigmamachine.rb CHANGED
@@ -60,6 +60,11 @@ class EnigmaMachine < Sinatra::Base
60
60
  set :views, File.dirname(__FILE__) + '/enigmamachine/views'
61
61
  set :public, File.dirname(__FILE__) + '/enigmamachine/public'
62
62
 
63
+ # Let's bind this thing to localhost only, it'd be suicidal to put it on the
64
+ # internet by binding it to all available interfaces.
65
+ #
66
+ set :bind, 'localhost'
67
+
63
68
  # Register helpers
64
69
  #
65
70
  helpers do
@@ -69,9 +74,13 @@ class EnigmaMachine < Sinatra::Base
69
74
 
70
75
  # Set up Rack authentication
71
76
  #
72
- use Rack::Auth::Basic do |username, password|
73
- [username, password] == ['admin', 'admin']
74
- end
77
+ # I'm going to disable this for now, although later this might be a good way
78
+ # of providing security for shared hosts. TODO: figure out how to secure the
79
+ # app for use on shared hosts.
80
+ #
81
+ # use Rack::Auth::Basic do |username, password|
82
+ # [username, password] == ['admin', 'admin']
83
+ # end
75
84
 
76
85
  # Include flash notices
77
86
  #
@@ -1,3 +1,3 @@
1
1
  require File.dirname(__FILE__) + '/../enigmamachine'
2
- EnigmaMachine.run! :host => 'localhost', :port => 2002
2
+ EnigmaMachine.run! :port => 2002
3
3
 
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: 19
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 4
10
- version: 0.1.4
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - dave
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-07 00:00:00 +01:00
18
+ date: 2010-07-08 00:00:00 +01:00
19
19
  default_executable: enigmamachine
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency