flvedit 0.7.0 → 0.7.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/Rakefile CHANGED
@@ -38,8 +38,8 @@ begin
38
38
  EOS
39
39
  gem.authors = ["Marc-André Lafortune"]
40
40
  gem.rubyforge_project = "flvedit"
41
- gem.add_dependency "packable", ">=1.2"
42
- gem.add_dependency "backports", ">=1.6.8"
41
+ gem.add_dependency "packable", ">=1.3.2"
42
+ gem.add_dependency "backports", ">=1.7.1"
43
43
  gem.has_rdoc = true
44
44
  gem.rdoc_options << '--title' << 'FLV::Edit' <<
45
45
  '--main' << 'README.rdoc' <<
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 7
4
- :patch: 0
4
+ :patch: 1
data/flvedit.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{flvedit}
5
- s.version = "0.7.0"
5
+ s.version = "0.7.1"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Marc-Andr\303\251 Lafortune"]
9
- s.date = %q{2009-08-18}
9
+ s.date = %q{2009-08-20}
10
10
  s.default_executable = %q{flvedit}
11
11
  s.description = %q{flvedit allows you to: * compute metadata for FLV files * merge, split or cut FLVs * insert / remote cue points or other events flvedit is meant as a replacement for FLVTool2, FLVMeta, FLVTool++ It can be used as a command line tool or as a Ruby library.}
12
12
  s.email = %q{github@marc-andre.ca}
@@ -97,14 +97,14 @@ Gem::Specification.new do |s|
97
97
  s.specification_version = 2
98
98
 
99
99
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
100
- s.add_runtime_dependency(%q<packable>, [">= 1.2"])
101
- s.add_runtime_dependency(%q<backports>, [">= 1.6.8"])
100
+ s.add_runtime_dependency(%q<packable>, [">= 1.3.2"])
101
+ s.add_runtime_dependency(%q<backports>, [">= 1.7.1"])
102
102
  else
103
- s.add_dependency(%q<packable>, [">= 1.2"])
104
- s.add_dependency(%q<backports>, [">= 1.6.8"])
103
+ s.add_dependency(%q<packable>, [">= 1.3.2"])
104
+ s.add_dependency(%q<backports>, [">= 1.7.1"])
105
105
  end
106
106
  else
107
- s.add_dependency(%q<packable>, [">= 1.2"])
108
- s.add_dependency(%q<backports>, [">= 1.6.8"])
107
+ s.add_dependency(%q<packable>, [">= 1.3.2"])
108
+ s.add_dependency(%q<backports>, [">= 1.7.1"])
109
109
  end
110
110
  end
@@ -17,7 +17,7 @@ module FLV
17
17
 
18
18
  TYPE_TO_CLASS = Hash.new do |h, type|
19
19
  #EndOfList
20
- raise IOError, "Invalid type for a flash variable. #{type.inspect} is not in #{h.keys.sort.inspect}" #todo: handle error for corrupted da
20
+ raise IOError, "Invalid type for a flash variable. #{type.inspect} is not in #{h.keys}" #todo: handle error for corrupted da
21
21
  end.merge!(
22
22
  0 => Numeric ,
23
23
  1 => TrueClass , # There really should be a Boolean class!
@@ -110,7 +110,14 @@ module FLV
110
110
  packer.read do |io|
111
111
  Hash[
112
112
  io.each([String, :flv], :flv_value).
113
- take_while {|str, val| val != EndOfList.instance }.
113
+ # take_while {|str, val| val != EndOfList.instance }.
114
+ take_while do |str, val|
115
+ if str == "" && val != EndOfList.instance
116
+ p "***Warning: read #{val.inspect} as end of list!?"
117
+ end
118
+ val != EndOfList.instance
119
+ str != ""
120
+ end.
114
121
  map{|k,v| [k.to_sym, v]}
115
122
  ]
116
123
  end
@@ -126,14 +133,9 @@ module FLV
126
133
 
127
134
  class EndOfList # :nodoc:
128
135
  include Singleton, Packable
129
- packers.set :flv, {}
130
-
131
- def write_packed(*)
132
- # no data to write
133
- end
134
-
135
- def self.read_packed(*)
136
- self.instance
136
+ packers.set(:flv) do |packer|
137
+ packer.write {} # no data to write
138
+ packer.read {EndOfList.instance}
137
139
  end
138
140
  end
139
141
 
@@ -22,7 +22,7 @@ module FLV
22
22
  end
23
23
  end
24
24
  puts (["Processed successfully:"] + ok).join("\n") unless ok.empty?
25
- puts (["**** Processed with errors: ****"] + errors.map{|path, err| "#{path}: #{err}"}).join("\n") unless errors.empty?
25
+ puts (["**** Processed with errors: ****"] + errors.map{|path, err| "#{path}: #{err}"}+ err.backtrace).join("\n") unless errors.empty?
26
26
  end
27
27
  end
28
28
  end
@@ -23,7 +23,11 @@ module FLV
23
23
  p "Opening #{@sources.first}"
24
24
  FLV::File.open(@sources.shift) do |f|
25
25
  @source = f
26
- super
26
+ begin
27
+ super
28
+ rescue EOFError
29
+ p "*** Warning: unexpected EOF for file #{f.path}"
30
+ end
27
31
  end
28
32
  end
29
33
 
data/test/test_flv.rb CHANGED
@@ -16,7 +16,7 @@ class TestFlv < Test::Unit::TestCase
16
16
  assert_equal n, FLV::Timestamp.try_convert(s).in_milliseconds
17
17
  end
18
18
  end
19
-
19
+
20
20
  { "0" => 0 ,
21
21
  "1" => 1000,
22
22
  "1.0" => 1000,
@@ -31,7 +31,7 @@ class TestFlv < Test::Unit::TestCase
31
31
  end
32
32
  end
33
33
  end
34
-
34
+
35
35
  context "TimestampRange" do
36
36
  context "conversion" do
37
37
  { "1:02-" => 62..(1/0.0),
@@ -45,7 +45,7 @@ class TestFlv < Test::Unit::TestCase
45
45
  end
46
46
  end
47
47
  end
48
-
48
+
49
49
 
50
50
  BIT_TEST = "\x01\x02\xff"
51
51
  context "Bit reading from #{BIT_TEST.inspect}" do
@@ -72,7 +72,7 @@ class TestFlv < Test::Unit::TestCase
72
72
  end
73
73
  end
74
74
  end
75
-
75
+
76
76
  context "Packing" do
77
77
  context "a header" do
78
78
  setup do
@@ -116,6 +116,26 @@ class TestFlv < Test::Unit::TestCase
116
116
  end
117
117
  end
118
118
 
119
+ context "Packing + Unpacking" do
120
+ should "return the same object" do
121
+ obj = {
122
+ :event => "onMetaData" ,
123
+ :audiocodecid => 2 ,
124
+ :audiodatarate => 15.7066666666667 ,
125
+ :canSeekToEnd => false ,
126
+ :hasAudio => true ,
127
+ :cuePoints => [] ,
128
+ :keyframes => {:filepositions=>[846, 1968], :times=>[0.0, 0.2]},
129
+ :metadatadate => Time.gm(2000,"jan",1,20,15,1)
130
+ }
131
+ io = StringIO.new("").packed
132
+ io.write(obj, :flv_value)
133
+ io.rewind
134
+ assert_equal(obj, io.read(:flv_value))
135
+ assert io.eof?
136
+ end
137
+ end
138
+
119
139
  context "Typematch" do
120
140
  setup do
121
141
  @chunks = FLV::File.open(SHORT_FLV).each.first(4)
@@ -141,5 +161,5 @@ class TestFlv < Test::Unit::TestCase
141
161
  end
142
162
  end
143
163
  end
144
-
164
+
145
165
  end
@@ -128,5 +128,4 @@ Header| ./test/fixtures/short.flv
128
128
  3.343 | FLV::Audio tag
129
129
  3.395 | FLV::Audio tag
130
130
  3.400 | FLV::Video tag (interframe)
131
- 3.448 | FLV::Audio tag
132
- 3.500 | FLV::Video tag (interframe)
131
+ 3.448 | FLV::Audio tag
@@ -110,5 +110,4 @@ Header| ./test/fixtures/short.flv
110
110
  3.187 | FLV::Audio tag
111
111
  3.239 | FLV::Audio tag
112
112
  3.244 | FLV::Video tag (interframe)
113
- 3.292 | FLV::Audio tag
114
- 3.344 | FLV::Video tag (interframe)
113
+ 3.292 | FLV::Audio tag
@@ -128,5 +128,4 @@ Header| ./test/fixtures/short.flv
128
128
  3.343 | FLV::Audio tag
129
129
  3.395 | FLV::Audio tag
130
130
  3.400 | FLV::Video tag (interframe)
131
- 3.448 | FLV::Audio tag
132
- 3.500 | FLV::Video tag (interframe)
131
+ 3.448 | FLV::Audio tag
@@ -3,32 +3,32 @@
3
3
  *** result:
4
4
  Header| ./test/fixtures/short.flv
5
5
  | extra :
6
+ | version : 1
6
7
  | has_audio : true
7
8
  | has_video : true
8
- | version : 1
9
9
  0.000 | FLV::Event tag
10
10
  | event : onMetaData
11
- | audiocodecid : 2
12
- | audiodatarate : 16
13
- | audiodelay : 0
11
+ | videocodecid : 4
14
12
  | canSeekToEnd : 1
15
- | creationdate : Fri Feb 03 122553 2006\n
16
- | duration : 16.9
17
- | framerate : 10
13
+ | width : 192
14
+ | audiodatarate : 16
18
15
  | height : 154
19
- | videocodecid : 4
16
+ | framerate : 10
17
+ | audiocodecid : 2
18
+ | duration : 16.9
19
+ | creationdate : Fri Feb 03 122553 2006\n
20
20
  | videodatarate : 40
21
- | width : 192
21
+ | audiodelay : 0
22
22
  0.000 | FLV::Audio tag
23
- | channel : mono
24
- | codec_id : 2
25
- | format : MP3
26
23
  | rate : 11000
24
+ | format : MP3
25
+ | codec_id : 2
26
+ | channel : mono
27
27
  | sample_size : 16
28
28
  0.000 | FLV::Video tag (keyframe)
29
- | codec : on2_vp6
30
- | codec_id : 4
31
29
  | dimensions : nil
30
+ | codec_id : 4
31
+ | codec : on2_vp6
32
32
  0.052 | FLV::Audio tag
33
33
  0.100 | FLV::Video tag (interframe)
34
34
  0.104 | FLV::Audio tag
@@ -129,109 +129,107 @@ Header| ./test/fixtures/short.flv
129
129
  3.395 | FLV::Audio tag
130
130
  3.400 | FLV::Video tag (interframe)
131
131
  3.448 | FLV::Audio tag
132
- 3.500 | FLV::Video tag (interframe)
133
- 3.500 | FLV::Event tag
132
+ 3.448 | FLV::Event tag
134
133
  | event : onNextSegment
135
134
  | file : short.flv
136
- 3.600 | FLV::Video tag (keyframe)
137
- 3.652 | FLV::Audio tag
138
- 3.700 | FLV::Video tag (interframe)
139
- 3.704 | FLV::Audio tag
140
- 3.756 | FLV::Audio tag
141
- 3.800 | FLV::Video tag (keyframe)
142
- 3.808 | FLV::Audio tag
143
- 3.861 | FLV::Audio tag
135
+ 3.500 | FLV::Video tag (keyframe)
136
+ 3.552 | FLV::Audio tag
137
+ 3.600 | FLV::Video tag (interframe)
138
+ 3.604 | FLV::Audio tag
139
+ 3.656 | FLV::Audio tag
140
+ 3.700 | FLV::Video tag (keyframe)
141
+ 3.708 | FLV::Audio tag
142
+ 3.761 | FLV::Audio tag
143
+ 3.800 | FLV::Video tag (interframe)
144
+ 3.813 | FLV::Audio tag
145
+ 3.865 | FLV::Audio tag
144
146
  3.900 | FLV::Video tag (interframe)
145
- 3.913 | FLV::Audio tag
146
- 3.965 | FLV::Audio tag
147
+ 3.917 | FLV::Audio tag
148
+ 3.970 | FLV::Audio tag
147
149
  4.000 | FLV::Video tag (interframe)
148
- 4.017 | FLV::Audio tag
149
- 4.070 | FLV::Audio tag
150
+ 4.022 | FLV::Audio tag
151
+ 4.074 | FLV::Audio tag
150
152
  4.100 | FLV::Video tag (interframe)
151
- 4.122 | FLV::Audio tag
152
- 4.174 | FLV::Audio tag
153
+ 4.126 | FLV::Audio tag
154
+ 4.179 | FLV::Audio tag
153
155
  4.200 | FLV::Video tag (interframe)
154
- 4.226 | FLV::Audio tag
155
- 4.279 | FLV::Audio tag
156
+ 4.231 | FLV::Audio tag
157
+ 4.283 | FLV::Audio tag
156
158
  4.300 | FLV::Video tag (interframe)
157
- 4.331 | FLV::Audio tag
158
- 4.383 | FLV::Audio tag
159
+ 4.335 | FLV::Audio tag
160
+ 4.388 | FLV::Audio tag
159
161
  4.400 | FLV::Video tag (interframe)
160
- 4.435 | FLV::Audio tag
161
- 4.488 | FLV::Audio tag
162
+ 4.440 | FLV::Audio tag
163
+ 4.492 | FLV::Audio tag
162
164
  4.500 | FLV::Video tag (interframe)
163
- 4.540 | FLV::Audio tag
164
- 4.592 | FLV::Audio tag
165
+ 4.544 | FLV::Audio tag
166
+ 4.597 | FLV::Audio tag
165
167
  4.600 | FLV::Video tag (interframe)
166
- 4.644 | FLV::Audio tag
167
- 4.697 | FLV::Audio tag
168
+ 4.649 | FLV::Audio tag
168
169
  4.700 | FLV::Video tag (interframe)
169
- 4.749 | FLV::Audio tag
170
+ 4.701 | FLV::Audio tag
171
+ 4.753 | FLV::Audio tag
170
172
  4.800 | FLV::Video tag (interframe)
171
- 4.801 | FLV::Audio tag
172
- 4.853 | FLV::Audio tag
173
+ 4.806 | FLV::Audio tag
174
+ 4.858 | FLV::Audio tag
173
175
  4.900 | FLV::Video tag (interframe)
174
- 4.906 | FLV::Audio tag
175
- 4.958 | FLV::Audio tag
176
+ 4.910 | FLV::Audio tag
177
+ 4.962 | FLV::Audio tag
176
178
  5.000 | FLV::Video tag (interframe)
177
- 5.010 | FLV::Audio tag
178
- 5.062 | FLV::Audio tag
179
+ 5.015 | FLV::Audio tag
180
+ 5.067 | FLV::Audio tag
179
181
  5.100 | FLV::Video tag (interframe)
180
- 5.115 | FLV::Audio tag
181
- 5.167 | FLV::Audio tag
182
+ 5.119 | FLV::Audio tag
183
+ 5.171 | FLV::Audio tag
182
184
  5.200 | FLV::Video tag (interframe)
183
- 5.219 | FLV::Audio tag
184
- 5.271 | FLV::Audio tag
185
+ 5.224 | FLV::Audio tag
186
+ 5.276 | FLV::Audio tag
185
187
  5.300 | FLV::Video tag (interframe)
186
- 5.324 | FLV::Audio tag
187
- 5.376 | FLV::Audio tag
188
+ 5.328 | FLV::Audio tag
189
+ 5.380 | FLV::Audio tag
188
190
  5.400 | FLV::Video tag (interframe)
189
- 5.428 | FLV::Audio tag
190
- 5.480 | FLV::Audio tag
191
+ 5.433 | FLV::Audio tag
192
+ 5.485 | FLV::Audio tag
191
193
  5.500 | FLV::Video tag (interframe)
192
- 5.533 | FLV::Audio tag
193
- 5.585 | FLV::Audio tag
194
+ 5.537 | FLV::Audio tag
195
+ 5.589 | FLV::Audio tag
194
196
  5.600 | FLV::Video tag (interframe)
195
- 5.637 | FLV::Audio tag
196
- 5.689 | FLV::Audio tag
197
+ 5.642 | FLV::Audio tag
198
+ 5.694 | FLV::Audio tag
197
199
  5.700 | FLV::Video tag (interframe)
198
- 5.742 | FLV::Audio tag
199
- 5.794 | FLV::Audio tag
200
+ 5.746 | FLV::Audio tag
201
+ 5.798 | FLV::Audio tag
200
202
  5.800 | FLV::Video tag (interframe)
201
- 5.846 | FLV::Audio tag
202
- 5.898 | FLV::Audio tag
203
+ 5.851 | FLV::Audio tag
203
204
  5.900 | FLV::Video tag (interframe)
204
- 5.951 | FLV::Audio tag
205
+ 5.903 | FLV::Audio tag
206
+ 5.955 | FLV::Audio tag
205
207
  6.000 | FLV::Video tag (interframe)
206
- 6.003 | FLV::Audio tag
207
- 6.055 | FLV::Audio tag
208
+ 6.007 | FLV::Audio tag
209
+ 6.059 | FLV::Audio tag
208
210
  6.100 | FLV::Video tag (interframe)
209
- 6.107 | FLV::Audio tag
210
- 6.159 | FLV::Audio tag
211
+ 6.112 | FLV::Audio tag
212
+ 6.164 | FLV::Audio tag
211
213
  6.200 | FLV::Video tag (interframe)
212
- 6.212 | FLV::Audio tag
213
- 6.264 | FLV::Audio tag
214
+ 6.216 | FLV::Audio tag
215
+ 6.268 | FLV::Audio tag
214
216
  6.300 | FLV::Video tag (interframe)
215
- 6.316 | FLV::Audio tag
216
- 6.368 | FLV::Audio tag
217
+ 6.321 | FLV::Audio tag
218
+ 6.373 | FLV::Audio tag
217
219
  6.400 | FLV::Video tag (interframe)
218
- 6.421 | FLV::Audio tag
219
- 6.473 | FLV::Audio tag
220
+ 6.425 | FLV::Audio tag
221
+ 6.477 | FLV::Audio tag
220
222
  6.500 | FLV::Video tag (interframe)
221
- 6.525 | FLV::Audio tag
222
- 6.577 | FLV::Audio tag
223
+ 6.530 | FLV::Audio tag
224
+ 6.582 | FLV::Audio tag
223
225
  6.600 | FLV::Video tag (interframe)
224
- 6.630 | FLV::Audio tag
225
- 6.682 | FLV::Audio tag
226
+ 6.634 | FLV::Audio tag
227
+ 6.686 | FLV::Audio tag
226
228
  6.700 | FLV::Video tag (interframe)
227
- 6.734 | FLV::Audio tag
228
- 6.786 | FLV::Audio tag
229
+ 6.739 | FLV::Audio tag
230
+ 6.791 | FLV::Audio tag
229
231
  6.800 | FLV::Video tag (interframe)
230
- 6.839 | FLV::Audio tag
231
- 6.891 | FLV::Audio tag
232
+ 6.843 | FLV::Audio tag
233
+ 6.895 | FLV::Audio tag
232
234
  6.900 | FLV::Video tag (interframe)
233
- 6.943 | FLV::Audio tag
234
- 6.995 | FLV::Audio tag
235
- 7.000 | FLV::Video tag (interframe)
236
- 7.048 | FLV::Audio tag
237
- 7.100 | FLV::Video tag (interframe)
235
+ 6.948 | FLV::Audio tag
@@ -4,16 +4,16 @@
4
4
  0.000 | FLV::Event tag
5
5
  | event : onMetaData
6
6
  | audiocodecid : 2
7
- | audiodatarate : 15.7066666666667
7
+ | audiodatarate : 15.9368658399098
8
8
  | audiodelay : 0.0
9
9
  | audiosamplerate: 11000
10
10
  | audiosamplesize: 16
11
11
  | audiosize : 7805
12
12
  | canSeekToEnd : false
13
13
  | cuePoints : []
14
- | datasize : 25001
15
- | duration : 3.6
16
- | filesize : 25430
14
+ | datasize : 24860
15
+ | duration : 3.548
16
+ | filesize : 25285
17
17
  | framerate : 10.0
18
18
  | hasAudio : true
19
19
  | hasCuePoints : false
@@ -23,11 +23,11 @@
23
23
  | height : 154
24
24
  | keyframes : {filepositions=>[846, 1968], times=>[0.0, 0.2]}
25
25
  | lastkeyframetimestamp: 0.2
26
- | lasttimestamp : 3.5
26
+ | lasttimestamp : 3.448
27
27
  | metadatacreator: flvedit........................................................
28
28
  | metadatadate : Sat Dec 20 000000 UTC 2008
29
29
  | stereo : false
30
30
  | videocodecid : 4
31
- | videodatarate : 35.7577777777778
32
- | videosize : 16487
31
+ | videodatarate : 35.988726042841
32
+ | videosize : 16346
33
33
  | width : 192
@@ -5,16 +5,16 @@
5
5
  | event : onMetaData
6
6
  | answer : 42
7
7
  | audiocodecid : 2
8
- | audiodatarate : 15.7066666666667
8
+ | audiodatarate : 15.9368658399098
9
9
  | audiodelay : 0.0
10
10
  | audiosamplerate: 11000
11
11
  | audiosamplesize: 16
12
12
  | audiosize : 7805
13
13
  | canSeekToEnd : false
14
14
  | cuePoints : []
15
- | datasize : 25001
16
- | duration : 3.6
17
- | filesize : 25430
15
+ | datasize : 24860
16
+ | duration : 3.548
17
+ | filesize : 25285
18
18
  | framerate : 10.0
19
19
  | hasAudio : true
20
20
  | hasCuePoints : false
@@ -24,13 +24,13 @@
24
24
  | height : 154
25
25
  | keyframes : {filepositions=>[846, 1968], times=>[0.0, 0.2]}
26
26
  | lastkeyframetimestamp: 0.2
27
- | lasttimestamp : 3.5
27
+ | lasttimestamp : 3.448
28
28
  | metadatacreator: flvedit........................................................
29
29
  | metadatadate : Sat Dec 20 000000 UTC 2008
30
30
  | pills : [red, blue]
31
31
  | stereo : false
32
32
  | testing : Hello, world!
33
33
  | videocodecid : 4
34
- | videodatarate : 35.7577777777778
35
- | videosize : 16487
34
+ | videodatarate : 35.988726042841
35
+ | videosize : 16346
36
36
  | width : 192
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flvedit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Marc-Andr\xC3\xA9 Lafortune"
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-18 00:00:00 -04:00
12
+ date: 2009-08-20 00:00:00 -04:00
13
13
  default_executable: flvedit
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: "1.2"
23
+ version: 1.3.2
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: backports
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.6.8
33
+ version: 1.7.1
34
34
  version:
35
35
  description: "flvedit allows you to: * compute metadata for FLV files * merge, split or cut FLVs * insert / remote cue points or other events flvedit is meant as a replacement for FLVTool2, FLVMeta, FLVTool++ It can be used as a command line tool or as a Ruby library."
36
36
  email: github@marc-andre.ca