airstream 0.2.3 → 0.3.1
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/bin/airstream +30 -33
- data/lib/airstream.rb +7 -4
- data/lib/airstream/network.rb +11 -0
- data/lib/airstream/server.rb +5 -16
- data/lib/airstream/version.rb +4 -0
- data/lib/airstream/video.rb +35 -0
- metadata +6 -4
data/bin/airstream
CHANGED
@@ -6,9 +6,7 @@ options = {
|
|
6
6
|
reciever: '192.168.1.8',
|
7
7
|
quiet: false,
|
8
8
|
verbose: false,
|
9
|
-
use_local_http:
|
10
|
-
http_path: '/var/www/html/airstream/',
|
11
|
-
http_url: 'http://192.168.1.2/airstream/'
|
9
|
+
use_local_http: true
|
12
10
|
}
|
13
11
|
|
14
12
|
CONFIG_FILE = File.join(ENV['HOME'], '.airstreamrc')
|
@@ -45,30 +43,14 @@ Basic options: (configure default in ~/.airstreamrc)
|
|
45
43
|
options[:verbose] = verbose
|
46
44
|
end
|
47
45
|
|
48
|
-
opts.on("--enable-use-httpd",
|
49
|
-
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
opts.on("-u HTTP_URL",
|
54
|
-
"the local webserver url") do |http_url|
|
55
|
-
options[:http_url] = http_url
|
56
|
-
end
|
57
|
-
|
58
|
-
opts.on("-p HTTP_PATH",
|
59
|
-
"the local webserver directory path") do |path|
|
60
|
-
options[:http_path] = path
|
61
|
-
end
|
62
|
-
|
63
|
-
# opts.on("--cleanup",
|
64
|
-
# "remove the local webserver files and exit") do |path|
|
65
|
-
# FileUtils.rm(Dir.glob(options[:http_path] + '/*'))
|
66
|
-
# exit 0
|
46
|
+
# opts.on("--enable-use-httpd",
|
47
|
+
# "use httpd to offer local files") do |use_httpd|
|
48
|
+
# options[:use_local_httpd] = true
|
67
49
|
# end
|
68
50
|
|
69
51
|
opts.on("-v", "--version",
|
70
52
|
"output version information then quit") do |path|
|
71
|
-
puts "airstream v" +
|
53
|
+
puts "airstream v" + Airstream::VERSION
|
72
54
|
exit 0
|
73
55
|
end
|
74
56
|
end
|
@@ -80,6 +62,7 @@ if ARGV.empty?
|
|
80
62
|
end
|
81
63
|
|
82
64
|
begin
|
65
|
+
|
83
66
|
option_parser.parse!
|
84
67
|
|
85
68
|
unless options[:reciever]
|
@@ -89,32 +72,46 @@ begin
|
|
89
72
|
|
90
73
|
server = Airstream::Server.new(options[:reciever])
|
91
74
|
|
75
|
+
puts "=> Ctrl-C to exit airstream"
|
92
76
|
ARGV.each do |file|
|
93
|
-
server.allow_local_httpd = options[:use_local_httpd]
|
94
|
-
if server.local_httpd_allowed?
|
95
|
-
server.http_path = options[:http_path]
|
96
|
-
server.http_url = options[:http_url]
|
97
|
-
end
|
98
77
|
|
78
|
+
server.allow_local_httpd = options[:use_local_httpd]
|
79
|
+
puts "sending video file #{file}" if options[:verbose]
|
99
80
|
server.video = file
|
100
81
|
|
82
|
+
print "loading " unless options[:quiet]
|
101
83
|
"|/-\\".chars.cycle.each do |c|
|
102
|
-
print c
|
84
|
+
print c unless options[:quiet]
|
85
|
+
sleep(0.2)
|
86
|
+
print "\b" unless options[:quiet]
|
103
87
|
break unless server.loading?
|
104
88
|
end
|
89
|
+
puts "done" unless options[:quiet]
|
105
90
|
|
91
|
+
video_title = File.basename(file, '.mp4')
|
106
92
|
pbar_options = {
|
107
|
-
title:
|
93
|
+
title: video_title,
|
108
94
|
total: server.video_duration,
|
109
|
-
format: '%t
|
95
|
+
format: '%t |%b%i| %p%%'
|
110
96
|
}
|
111
97
|
pbar = ProgressBar.create(pbar_options)
|
112
|
-
while server.video_position < server.video_duration
|
113
|
-
pbar.progress =
|
98
|
+
while (elapsed_time=server.video_position) < server.video_duration
|
99
|
+
pbar.progress = elapsed_time
|
100
|
+
formatted_time = Time.at(elapsed_time).gmtime.strftime('%R:%S')
|
101
|
+
pbar.title = "#{video_title} #{formatted_time}"
|
114
102
|
sleep 1.0
|
115
103
|
end
|
116
104
|
pbar.finish
|
117
105
|
end
|
106
|
+
|
107
|
+
rescue Airplay::Protocol::InvalidMediaError
|
108
|
+
STDERR.puts
|
109
|
+
STDERR.puts "invalid media file"
|
110
|
+
exit 0
|
111
|
+
rescue NoMethodError # @FIX webrick raises no method error
|
112
|
+
STDERR.puts
|
113
|
+
STDERR.puts "file host shutdown"
|
114
|
+
exit 0
|
118
115
|
rescue Interrupt
|
119
116
|
STDERR.puts
|
120
117
|
STDERR.puts "exiting"
|
data/lib/airstream.rb
CHANGED
@@ -2,13 +2,16 @@
|
|
2
2
|
require 'optparse'
|
3
3
|
require 'airplay'
|
4
4
|
require 'ruby-progressbar'
|
5
|
-
require 'digest'
|
6
|
-
require 'fileutils'
|
7
5
|
require 'yaml'
|
6
|
+
require 'rack'
|
8
7
|
|
9
8
|
module Airstream
|
10
|
-
|
11
|
-
|
9
|
+
AIRPLAY_PORT = 7000
|
10
|
+
AIRSTREAM_PORT = 7000
|
12
11
|
end
|
13
12
|
|
13
|
+
require 'airstream/version.rb'
|
14
|
+
require 'airstream/network.rb'
|
15
|
+
require 'airstream/node.rb'
|
16
|
+
require 'airstream/video.rb'
|
14
17
|
require 'airstream/server.rb'
|
data/lib/airstream/server.rb
CHANGED
@@ -1,15 +1,11 @@
|
|
1
1
|
|
2
2
|
module Airstream
|
3
|
-
class Server
|
4
|
-
attr_accessor :http_path, :http_url, :video_duration
|
3
|
+
class Server
|
5
4
|
|
6
5
|
@local_httpd_allowed = false
|
7
6
|
|
8
7
|
def initialize(reciever)
|
9
|
-
|
10
|
-
reciever, reciever, reciever, Airstream::DEFAULT_PORT)
|
11
|
-
@device = Airplay::Client.new(node)
|
12
|
-
@device.use(node) # does not work without that second assign
|
8
|
+
@device = Airstream::Node.new reciever
|
13
9
|
end
|
14
10
|
|
15
11
|
def image=(image_file)
|
@@ -17,16 +13,9 @@ module Airstream
|
|
17
13
|
end
|
18
14
|
|
19
15
|
def video=(video_file)
|
20
|
-
video_duration = nil
|
21
|
-
|
22
|
-
|
23
|
-
unless File.exists?(http_path + filename)
|
24
|
-
FileUtils.cp(video_file, http_path + filename)
|
25
|
-
end
|
26
|
-
@device.send_video http_url + filename
|
27
|
-
else
|
28
|
-
@device.send_video video_file
|
29
|
-
end
|
16
|
+
@video_duration = nil
|
17
|
+
video = Video.new(video_file)
|
18
|
+
@device.send_video(video.url)
|
30
19
|
end
|
31
20
|
|
32
21
|
def allow_local_httpd=(is_allowed)
|
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
require 'rack'
|
3
|
+
require 'webrick'
|
4
|
+
|
5
|
+
module Airstream
|
6
|
+
class Video
|
7
|
+
|
8
|
+
@@server = nil
|
9
|
+
attr_reader :url
|
10
|
+
|
11
|
+
def initialize(video_file)
|
12
|
+
if File.exists? video_file
|
13
|
+
@@server.server.shutdown if @@server
|
14
|
+
@url = host_file(video_file)
|
15
|
+
else
|
16
|
+
@url = video_file
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def host_file(file)
|
21
|
+
@@server = Rack::Server.new(
|
22
|
+
:server => :webrick,
|
23
|
+
:Host => Airstream::Network.get_local_ip,
|
24
|
+
:Port => AIRSTREAM_PORT,
|
25
|
+
:app => Rack::File.new(file),
|
26
|
+
:AccessLog => [], # stfu webrick
|
27
|
+
:Logger => WEBrick::Log::new("/dev/null", 7)
|
28
|
+
)
|
29
|
+
Thread.start do
|
30
|
+
@@server.start
|
31
|
+
end
|
32
|
+
"http://#{@@server.options[:Host]}:#{@@server.options[:Port]}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: airstream
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: airplay
|
@@ -59,8 +59,7 @@ dependencies:
|
|
59
59
|
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
|
-
description: ! "A command line tool to stream video and image files to\n airplay-devices
|
63
|
-
a webserver is needed for local video\n files."
|
62
|
+
description: ! "A command line tool to stream video and image files to\n airplay-devices."
|
64
63
|
email:
|
65
64
|
- christoph at lipautz.org
|
66
65
|
executables:
|
@@ -72,6 +71,9 @@ files:
|
|
72
71
|
- bin/airstream
|
73
72
|
- bin/airimg
|
74
73
|
- lib/airstream.rb
|
74
|
+
- lib/airstream/version.rb
|
75
|
+
- lib/airstream/network.rb
|
76
|
+
- lib/airstream/video.rb
|
75
77
|
- lib/airstream/server.rb
|
76
78
|
homepage: https://github.com/unused/airstream
|
77
79
|
licenses: []
|