vidibus-recording 0.0.1 → 0.0.2

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/Gemfile.lock CHANGED
@@ -1,11 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- vidibus-recording (0.0.1)
4
+ vidibus-recording (0.0.2)
5
5
  delayed_job_mongoid
6
6
  mongoid (~> 2.0.0.beta.20)
7
- open4
8
- robustthread
9
7
  vidibus-uuid
10
8
 
11
9
  GEM
@@ -35,10 +33,8 @@ GEM
35
33
  mongo (~> 1.2)
36
34
  tzinfo (~> 0.3.22)
37
35
  will_paginate (~> 3.0.pre)
38
- open4 (1.0.1)
39
36
  rake (0.8.7)
40
37
  relevance-rcov (0.9.2.1)
41
- robustthread (0.5.2)
42
38
  rr (1.0.2)
43
39
  rspec (2.0.1)
44
40
  rspec-core (~> 2.0.1)
@@ -65,10 +61,8 @@ DEPENDENCIES
65
61
  bundler (>= 1.0.0)
66
62
  delayed_job_mongoid
67
63
  mongoid (~> 2.0.0.beta.20)
68
- open4
69
64
  rake
70
65
  relevance-rcov
71
- robustthread
72
66
  rr
73
67
  rspec (~> 2.0.0.beta.20)
74
68
  vidibus-recording!
@@ -1,6 +1,5 @@
1
- require "open4"
1
+ require "open3"
2
2
  require "yaml"
3
- require "robustthread"
4
3
  require "delayed_job_mongoid"
5
4
  require "active_support/core_ext"
6
5
  require "vidibus-uuid"
@@ -58,7 +58,7 @@ module Vidibus::Recording::Backend
58
58
  #
59
59
  def extract_metadata(std)
60
60
  if metadata = std.match(/Metadata\:\n\s+(.+)\Z/m)
61
- tuples = $1.scan(/([^\n\s\d]+)\s*([^\n]+)\n/m)
61
+ tuples = $1.scan(/([^\n\ \d]+)\ +([^\ ][^\n]+)\n/mi)
62
62
  self.metadata = Hash[tuples]
63
63
  end
64
64
  end
@@ -1,7 +1,5 @@
1
1
  module Vidibus::Recording
2
2
  class Job
3
- include Open4
4
-
5
3
  class ProcessError < StandardError; end
6
4
 
7
5
  attr_accessor :recording, :pid
@@ -12,7 +10,6 @@ module Vidibus::Recording
12
10
  end
13
11
 
14
12
  def start
15
- start_logger
16
13
  self.pid = fork do
17
14
  start_thread
18
15
  end
@@ -48,56 +45,44 @@ module Vidibus::Recording
48
45
  protected
49
46
 
50
47
  def start_thread
51
- stdin = ""
52
- stdout = ""
53
- stderr = ""
54
- last_stderr = ""
55
- last_stdout = ""
56
- task = background(recording.backend.command, 0=>stdin, 1=>stdout, 2=>stderr)
57
-
58
- waiter = Thread.new {y(task.pid => task.exitstatus)} # t.exitstatus is a blocking call!
59
48
  timeout = 5
60
-
61
- while(status = task.status)
62
- unless stderr == last_stderr
63
- metadata = extract_metadata(stderr)
64
- last_stderr = stderr
65
- end
66
-
67
- unless stdout == last_stdout
68
- metadata = extract_metadata(stdout)
69
- last_stdout = stdout
70
- end
71
-
72
- unless metadata
73
- timeout -= 1
74
- if timeout == 0
75
- recording.fail("No Metadata has been received. This stream does not work.")
76
- return
49
+ metadata = nil
50
+
51
+ Open3::popen3(recording.backend.command) do |stdin, stdout, stderr, waiter|
52
+ loop do
53
+ size = stderr.stat.blocks * stderr.stat.blksize
54
+ if size > 0
55
+ std = stderr.readpartial(size) rescue ""
56
+ log(std)
57
+ metadata = extract_metadata(std) unless metadata
77
58
  end
59
+ unless metadata
60
+ timeout -= 1
61
+ if timeout == 0
62
+ recording.fail("No Metadata has been received. This stream does not work.")
63
+ return
64
+ end
65
+ end
66
+ sleep 2
78
67
  end
79
-
80
- sleep 2
81
68
  end
82
-
83
69
  waiter.join
84
70
  end
85
71
 
72
+ def log(msg)
73
+ File.open(recording.log_file, "a") do |f|
74
+ f.write(msg)
75
+ end
76
+ end
77
+
86
78
  def extract_metadata(std)
87
79
  metadata = recording.backend.extract_metadata(std)
88
80
  if metadata
89
- File.open(recording.yml_file, "w") do |file|
90
- file.write(metadata.to_yaml)
81
+ File.open(recording.yml_file, "w") do |f|
82
+ f.write(metadata.to_yaml)
91
83
  end
92
84
  end
93
85
  metadata
94
86
  end
95
-
96
- def start_logger
97
- RobustThread.logger = Logger.new(recording.log_file)
98
- RobustThread.exception_handler do |exception|
99
- RobustThread.log exception
100
- end
101
- end
102
87
  end
103
88
  end
@@ -151,7 +151,7 @@ module Vidibus::Recording
151
151
  if str = read_file(log_file)
152
152
  str.gsub!(/\A[^\n]+\n/, "") # remove first line
153
153
  unless str == ""
154
- self.log = str
154
+ self.log = str.gsub(/\r\n?/, "\n")
155
155
  end
156
156
  end
157
157
  end
@@ -1,5 +1,5 @@
1
1
  module Vidibus
2
2
  module Recording
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
@@ -0,0 +1,62 @@
1
+ require "spec_helper"
2
+ require "recording/backend/rtmpdump"
3
+
4
+ describe "Vidibus::Recording::Backend::Rtmpdump" do
5
+
6
+ let(:this) {Vidibus::Recording::Backend::Rtmpdump.new(:stream => "rtmp://test", :file => "test.rec")}
7
+ let(:log) do
8
+ %(RTMPDump v2.2
9
+ (c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
10
+ Connecting ...
11
+ ERROR: rtmp server sent error
12
+ Starting Live Stream
13
+ Metadata:
14
+ author
15
+ copyright
16
+ description
17
+ keywords
18
+ rating
19
+ title
20
+ presetname Custom
21
+ creationdate Mon Jan 17 15:22:50 2011
22
+ videodevice Osprey-210 Video Device 1
23
+ framerate 25.00
24
+ width 680.00
25
+ height 394.00
26
+ videocodecid avc1
27
+ videodatarate 650.00
28
+ avclevel 31.00
29
+ avcprofile 66.00
30
+ videokeyframe_frequency5.00
31
+ audiodevice Osprey-210 Audio Device 1
32
+ audiosamplerate 22050.00
33
+ audiochannels 1.00
34
+ audioinputvolume 75.00
35
+ audiocodecid .mp3
36
+ audiodatarate 48.00
37
+ )
38
+ end
39
+
40
+ describe "extract_metadata" do
41
+ it "should extract relevant metadata" do
42
+ this.extract_metadata(log).should eql({
43
+ "presetname" => "Custom",
44
+ "creationdate" => "Mon Jan 17 15:22:50 2011",
45
+ "videodevice" => "Osprey-210 Video Device 1",
46
+ "framerate" => "25.00",
47
+ "width" => "680.00",
48
+ "height" => "394.00",
49
+ "videocodecid" => "avc1",
50
+ "videodatarate" => "650.00",
51
+ "avclevel" => "31.00",
52
+ "avcprofile" => "66.00",
53
+ "audiodevice" => "Osprey-210 Audio Device 1",
54
+ "audiosamplerate" => "22050.00",
55
+ "audiochannels" => "1.00",
56
+ "audioinputvolume" => "75.00",
57
+ "audiocodecid" => ".mp3",
58
+ "audiodatarate" => "48.00"
59
+ })
60
+ end
61
+ end
62
+ end
@@ -15,8 +15,6 @@ Gem::Specification.new do |s|
15
15
  s.required_rubygems_version = ">= 1.3.6"
16
16
 
17
17
  s.add_dependency "mongoid", "~> 2.0.0.beta.20"
18
- s.add_dependency "open4"
19
- s.add_dependency "robustthread"
20
18
  s.add_dependency "delayed_job_mongoid"
21
19
 
22
20
  s.add_dependency "vidibus-uuid"
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vidibus-recording
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Andre Pankratz
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-23 00:00:00 +01:00
18
+ date: 2011-01-24 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -37,7 +37,7 @@ dependencies:
37
37
  type: :runtime
38
38
  version_requirements: *id001
39
39
  - !ruby/object:Gem::Dependency
40
- name: open4
40
+ name: delayed_job_mongoid
41
41
  prerelease: false
42
42
  requirement: &id002 !ruby/object:Gem::Requirement
43
43
  none: false
@@ -51,7 +51,7 @@ dependencies:
51
51
  type: :runtime
52
52
  version_requirements: *id002
53
53
  - !ruby/object:Gem::Dependency
54
- name: robustthread
54
+ name: vidibus-uuid
55
55
  prerelease: false
56
56
  requirement: &id003 !ruby/object:Gem::Requirement
57
57
  none: false
@@ -64,38 +64,10 @@ dependencies:
64
64
  version: "0"
65
65
  type: :runtime
66
66
  version_requirements: *id003
67
- - !ruby/object:Gem::Dependency
68
- name: delayed_job_mongoid
69
- prerelease: false
70
- requirement: &id004 !ruby/object:Gem::Requirement
71
- none: false
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- hash: 3
76
- segments:
77
- - 0
78
- version: "0"
79
- type: :runtime
80
- version_requirements: *id004
81
- - !ruby/object:Gem::Dependency
82
- name: vidibus-uuid
83
- prerelease: false
84
- requirement: &id005 !ruby/object:Gem::Requirement
85
- none: false
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- hash: 3
90
- segments:
91
- - 0
92
- version: "0"
93
- type: :runtime
94
- version_requirements: *id005
95
67
  - !ruby/object:Gem::Dependency
96
68
  name: bundler
97
69
  prerelease: false
98
- requirement: &id006 !ruby/object:Gem::Requirement
70
+ requirement: &id004 !ruby/object:Gem::Requirement
99
71
  none: false
100
72
  requirements:
101
73
  - - ">="
@@ -107,11 +79,11 @@ dependencies:
107
79
  - 0
108
80
  version: 1.0.0
109
81
  type: :development
110
- version_requirements: *id006
82
+ version_requirements: *id004
111
83
  - !ruby/object:Gem::Dependency
112
84
  name: rake
113
85
  prerelease: false
114
- requirement: &id007 !ruby/object:Gem::Requirement
86
+ requirement: &id005 !ruby/object:Gem::Requirement
115
87
  none: false
116
88
  requirements:
117
89
  - - ">="
@@ -121,11 +93,11 @@ dependencies:
121
93
  - 0
122
94
  version: "0"
123
95
  type: :development
124
- version_requirements: *id007
96
+ version_requirements: *id005
125
97
  - !ruby/object:Gem::Dependency
126
98
  name: rspec
127
99
  prerelease: false
128
- requirement: &id008 !ruby/object:Gem::Requirement
100
+ requirement: &id006 !ruby/object:Gem::Requirement
129
101
  none: false
130
102
  requirements:
131
103
  - - ~>
@@ -139,11 +111,11 @@ dependencies:
139
111
  - 20
140
112
  version: 2.0.0.beta.20
141
113
  type: :development
142
- version_requirements: *id008
114
+ version_requirements: *id006
143
115
  - !ruby/object:Gem::Dependency
144
116
  name: rr
145
117
  prerelease: false
146
- requirement: &id009 !ruby/object:Gem::Requirement
118
+ requirement: &id007 !ruby/object:Gem::Requirement
147
119
  none: false
148
120
  requirements:
149
121
  - - ">="
@@ -153,11 +125,11 @@ dependencies:
153
125
  - 0
154
126
  version: "0"
155
127
  type: :development
156
- version_requirements: *id009
128
+ version_requirements: *id007
157
129
  - !ruby/object:Gem::Dependency
158
130
  name: relevance-rcov
159
131
  prerelease: false
160
- requirement: &id010 !ruby/object:Gem::Requirement
132
+ requirement: &id008 !ruby/object:Gem::Requirement
161
133
  none: false
162
134
  requirements:
163
135
  - - ">="
@@ -167,7 +139,7 @@ dependencies:
167
139
  - 0
168
140
  version: "0"
169
141
  type: :development
170
- version_requirements: *id010
142
+ version_requirements: *id008
171
143
  description: Allows recording of RTMP video streams. Uses RTMPdump.
172
144
  email: andre@vidibus.com
173
145
  executables: []
@@ -193,6 +165,7 @@ files:
193
165
  - lib/vidibus/recording/mongoid.rb
194
166
  - lib/vidibus/recording/version.rb
195
167
  - spec/spec_helper.rb
168
+ - spec/vidibus/recording/backend/rtmpdump_spec.rb
196
169
  - spec/vidibus/recording/backend_spec.rb
197
170
  - spec/vidibus/recording/mongoid_spec.rb
198
171
  - vidibus-recording.gemspec