flvedit 0.6.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.
Files changed (54) hide show
  1. data/CHANGELOG.rdoc +5 -0
  2. data/LICENSE +24 -0
  3. data/README.rdoc +90 -0
  4. data/Rakefile +137 -0
  5. data/VERSION.yml +4 -0
  6. data/bin/flvedit +14 -0
  7. data/lib/flv/audio.rb +66 -0
  8. data/lib/flv/base.rb +38 -0
  9. data/lib/flv/body.rb +57 -0
  10. data/lib/flv/edit/options.rb +162 -0
  11. data/lib/flv/edit/processor/add.rb +67 -0
  12. data/lib/flv/edit/processor/base.rb +209 -0
  13. data/lib/flv/edit/processor/command_line.rb +23 -0
  14. data/lib/flv/edit/processor/cut.rb +27 -0
  15. data/lib/flv/edit/processor/debug.rb +30 -0
  16. data/lib/flv/edit/processor/head.rb +16 -0
  17. data/lib/flv/edit/processor/join.rb +52 -0
  18. data/lib/flv/edit/processor/meta_data_maker.rb +127 -0
  19. data/lib/flv/edit/processor/print.rb +13 -0
  20. data/lib/flv/edit/processor/printer.rb +27 -0
  21. data/lib/flv/edit/processor/reader.rb +30 -0
  22. data/lib/flv/edit/processor/save.rb +28 -0
  23. data/lib/flv/edit/processor/update.rb +27 -0
  24. data/lib/flv/edit/processor.rb +3 -0
  25. data/lib/flv/edit/runner.rb +23 -0
  26. data/lib/flv/edit/version.rb +15 -0
  27. data/lib/flv/edit.rb +20 -0
  28. data/lib/flv/event.rb +40 -0
  29. data/lib/flv/file.rb +41 -0
  30. data/lib/flv/header.rb +37 -0
  31. data/lib/flv/packing.rb +140 -0
  32. data/lib/flv/tag.rb +62 -0
  33. data/lib/flv/timestamp.rb +124 -0
  34. data/lib/flv/util/double_check.rb +22 -0
  35. data/lib/flv/video.rb +73 -0
  36. data/lib/flv.rb +24 -0
  37. data/test/fixtures/corrupted.flv +0 -0
  38. data/test/fixtures/short.flv +0 -0
  39. data/test/fixtures/tags.xml +39 -0
  40. data/test/test_flv.rb +145 -0
  41. data/test/test_flv_edit.rb +32 -0
  42. data/test/test_flv_edit_results.rb +27 -0
  43. data/test/test_helper.rb +9 -0
  44. data/test/text_flv_edit_results/add_tags.txt +132 -0
  45. data/test/text_flv_edit_results/cut_from.txt +114 -0
  46. data/test/text_flv_edit_results/cut_key.txt +20 -0
  47. data/test/text_flv_edit_results/debug.txt +132 -0
  48. data/test/text_flv_edit_results/debug_limited.txt +18 -0
  49. data/test/text_flv_edit_results/debug_range.txt +32 -0
  50. data/test/text_flv_edit_results/join.txt +237 -0
  51. data/test/text_flv_edit_results/print.txt +16 -0
  52. data/test/text_flv_edit_results/stop.txt +38 -0
  53. data/test/text_flv_edit_results/update.txt +33 -0
  54. metadata +134 -0
data/test/test_flv.rb ADDED
@@ -0,0 +1,145 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class TestFlv < Test::Unit::TestCase
4
+ context "Timestamp" do
5
+ context "conversion" do
6
+ { 0 => "0.000" ,
7
+ 1 => "0.001" ,
8
+ 1000 => "1.000" ,
9
+ 12_345 => "12.345" ,
10
+ 61_000 => "1:01.000" ,
11
+ 601_000 => "10:01.000" ,
12
+ 3600_000 => "1:00:00.000"
13
+ }.each do |n, s|
14
+ should "convert between #{s} and #{n} ms" do
15
+ assert_equal s, FLV::Timestamp.in_milliseconds(n).to_s
16
+ assert_equal n, FLV::Timestamp.try_convert(s).in_milliseconds
17
+ end
18
+ end
19
+
20
+ { "0" => 0 ,
21
+ "1" => 1000,
22
+ "1.0" => 1000,
23
+ "1m" => 60_000,
24
+ "1h" => 60 * 60_000,
25
+ "1::" => 60 * 60_000,
26
+ "1h23m45.6789" => 60 * 60_000 + 23*60_000 + 45678
27
+ }.each do |s, n|
28
+ should "convert #{s} to #{n} ms" do
29
+ assert_equal n, FLV::Timestamp.try_convert(s).in_milliseconds
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ context "TimestampRange" do
36
+ context "conversion" do
37
+ { "1:02-" => 62..(1/0.0),
38
+ "-1.23" => 0..1.23,
39
+ "12345-1:02:03.456" => 12345..3723.456,
40
+ "2m.345-1h" => 120.345..3600
41
+ }.each do |s, r|
42
+ should "convert #{s} to #{r} ms" do
43
+ assert_equal r, FLV::TimestampRange.try_convert(s).in_seconds
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+
50
+ BIT_TEST = "\x01\x02\xff"
51
+ context "Bit reading from #{BIT_TEST.inspect}" do
52
+ setup do
53
+ @body = BIT_TEST.clone
54
+ class <<@body
55
+ include FLV::Body
56
+ end
57
+ end
58
+
59
+ [ [0..0, 0],
60
+ [0...7, 0],
61
+ [0..7, 1],
62
+ [6..7, 1],
63
+ [7..7, 1],
64
+ [14, 1],
65
+ [3..9, 0b100],
66
+ [3...15,0b1_0000_001],
67
+ [3..15, 0b1_0000_0010],
68
+ [3..16, 0b1_0000_0010_1]
69
+ ].each do |bits, val|
70
+ should "return #{val} for bits #{bits}" do
71
+ assert_equal val, @body.read_bits(bits)
72
+ end
73
+ end
74
+ end
75
+
76
+ context "Packing" do
77
+ context "a header" do
78
+ setup do
79
+ @header = FLV::Header.new
80
+ @header.extra = "hello"
81
+ @header.has_audio = true
82
+ end
83
+
84
+ should "work" do
85
+ assert_equal "FLV\001\004\000\000\000\016hello\000\000\000\000",
86
+ @header.pack
87
+ end
88
+ end
89
+
90
+ context "an audio tag" do
91
+ setup do
92
+ @tag = FLV::Tag.new(FLV::Timestamp.in_milliseconds(0x1234), FLV::Audio.new("bogus audio data!"))
93
+ end
94
+
95
+ should "work" do
96
+ assert_equal "\b\000\000\021\000\x12\x34\000\000\000\000bogus audio data!\000\000\000\034",
97
+ @tag.pack
98
+ end
99
+ end
100
+ end
101
+
102
+ context "Unpacking" do
103
+ setup do
104
+ @io = StringIO.new("FLV\001\004\000\000\000\016hello\000\000\000\000!!")
105
+ @header = @io.packed.read(FLV::Header)
106
+ end
107
+
108
+ should "read the header correctly" do
109
+ assert_equal "hello", @header.extra
110
+ assert_equal true, @header.has_audio
111
+ assert_equal false, @header.has_video
112
+ end
113
+
114
+ should "read just what's required" do
115
+ assert_equal "!!", @io.read
116
+ end
117
+ end
118
+
119
+ context "Typematch" do
120
+ setup do
121
+ @chunks = FLV::File.open(SHORT_FLV).each.first(4)
122
+ end
123
+
124
+ should "work" do
125
+ assert_equal false, @chunks[2].is?(:audio)
126
+ end
127
+
128
+ {
129
+ :header => [true , false, false, false],
130
+ :tag => [false, true , true , true ],
131
+ :audio => [false, false, false, false],
132
+ :audio_tag => [false, false, true , false],
133
+ :nellymoser => [false, false, false, false],
134
+ :mP3 => [false, false, true , false],
135
+ :event_tag => [false, true , false, false],
136
+ :onMetaData => [false, true , false, false],
137
+ :onCuePoint => [false, false, false, false],
138
+ }.each do |check, answers|
139
+ should "work for #{check}" do
140
+ assert_equal answers, @chunks.map{|t| t.is?(check) }, check
141
+ end
142
+ end
143
+ end
144
+
145
+ end
@@ -0,0 +1,32 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class TestFlvEdit < Test::Unit::TestCase
4
+ context "Options parsing" do
5
+ setup do
6
+ @options = FLV::Edit::Options.new([SHORT_FLV, "--Debug"])
7
+ end
8
+
9
+ should "detect files" do
10
+ assert_equal [SHORT_FLV], @options.options[:files]
11
+ end
12
+
13
+ end
14
+
15
+ context "Command line tool" do
16
+ setup do
17
+ File.delete(TEMP_FLV) if File.exist?(TEMP_FLV)
18
+ end
19
+
20
+ should "save" do
21
+ assert !File.exist?(TEMP_FLV)
22
+ runner = FLV::Edit::Runner.new([SHORT_FLV, "--Update", "--Save", TEMP_FLV])
23
+ runner.options[:dont_catch_errors] = true
24
+ runner.run
25
+ assert File.exist?(TEMP_FLV)
26
+ end
27
+
28
+ teardown do
29
+ File.delete(TEMP_FLV) if File.exist?(TEMP_FLV)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,27 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class TestFlvEdit < Test::Unit::TestCase
4
+ context "Command line results" do
5
+ Dir.glob(File.dirname(__FILE__)+"/text_flv_edit_results/*.txt").each do |fn|
6
+ sep, args, sep, *expect = File.readlines(fn).map!(&:chomp)
7
+ args = args.split(' ')
8
+ args.unshift SHORT_FLV unless args.first.start_with?(".")
9
+
10
+ context "for 'flvedit #{args.join(' ')}'" do
11
+ setup do
12
+ Time.stubs(:now).returns(Time.utc(2008,"dec",20))
13
+ @result = ""
14
+ runner = FLV::Edit::Runner.new(args)
15
+ runner.options[:dont_catch_errors] = true
16
+ runner.options[:out] = StringIO.new(@result)
17
+ runner.run
18
+ end
19
+ should "match #{fn}" do
20
+ @result = @result.split("\n")
21
+ same = @result & expect
22
+ assert_equal expect-same, @result-same
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,9 @@
1
+ require 'test/unit'
2
+ require 'rubygems'
3
+ require 'backports'
4
+ require_relative '../lib/flv/edit'
5
+ require 'shoulda'
6
+ require 'mocha'
7
+
8
+ SHORT_FLV = File.dirname(__FILE__) + "/fixtures/short.flv"
9
+ TEMP_FLV = File.dirname(__FILE__) + "/fixtures/short_temp.flv"
@@ -0,0 +1,132 @@
1
+ *** command:
2
+ --Add ./test/fixtures/tags.xml --Debug
3
+ *** result:
4
+ Header| ./test/fixtures/short.flv
5
+ | extra :
6
+ | has_audio : true
7
+ | has_video : true
8
+ | version : 1
9
+ 0.000 | FLV::Event tag
10
+ | event : onMetaData
11
+ | audiocodecid : 2
12
+ | audiodatarate : 16
13
+ | audiodelay : 0
14
+ | canSeekToEnd : 1
15
+ | creationdate : Fri Feb 03 122553 2006\n
16
+ | duration : 16.9
17
+ | framerate : 10
18
+ | height : 154
19
+ | videocodecid : 4
20
+ | videodatarate : 40
21
+ | width : 192
22
+ 0.000 | FLV::Audio tag
23
+ | channel : mono
24
+ | codec_id : 2
25
+ | format : MP3
26
+ | rate : 11000
27
+ | sample_size : 16
28
+ 0.000 | FLV::Video tag (keyframe)
29
+ | codec : on2_vp6
30
+ | codec_id : 4
31
+ | dimensions : nil
32
+ 0.052 | FLV::Audio tag
33
+ 0.100 | FLV::Video tag (interframe)
34
+ 0.104 | FLV::Audio tag
35
+ 0.156 | FLV::Audio tag
36
+ 0.200 | FLV::Video tag (keyframe)
37
+ 0.208 | FLV::Audio tag
38
+ 0.261 | FLV::Audio tag
39
+ 0.300 | FLV::Video tag (interframe)
40
+ 0.313 | FLV::Audio tag
41
+ 0.365 | FLV::Audio tag
42
+ 0.400 | FLV::Video tag (interframe)
43
+ 0.417 | FLV::Audio tag
44
+ 0.470 | FLV::Audio tag
45
+ 0.500 | FLV::Video tag (interframe)
46
+ 0.522 | FLV::Audio tag
47
+ 0.574 | FLV::Audio tag
48
+ 0.600 | FLV::Video tag (interframe)
49
+ 0.626 | FLV::Audio tag
50
+ 0.679 | FLV::Audio tag
51
+ 0.700 | FLV::Video tag (interframe)
52
+ 0.731 | FLV::Audio tag
53
+ 0.783 | FLV::Audio tag
54
+ 0.800 | FLV::Video tag (interframe)
55
+ 0.835 | FLV::Audio tag
56
+ 0.888 | FLV::Audio tag
57
+ 0.900 | FLV::Video tag (interframe)
58
+ 0.940 | FLV::Audio tag
59
+ 0.992 | FLV::Audio tag
60
+ 1.000 | FLV::Video tag (interframe)
61
+ 1.044 | FLV::Audio tag
62
+ 1.097 | FLV::Audio tag
63
+ 1.100 | FLV::Video tag (interframe)
64
+ 1.149 | FLV::Audio tag
65
+ 1.200 | FLV::Video tag (interframe)
66
+ 1.201 | FLV::Audio tag
67
+ 1.253 | FLV::Audio tag
68
+ 1.300 | FLV::Video tag (interframe)
69
+ 1.306 | FLV::Audio tag
70
+ 1.358 | FLV::Audio tag
71
+ 1.400 | FLV::Video tag (interframe)
72
+ 1.410 | FLV::Audio tag
73
+ 1.462 | FLV::Audio tag
74
+ 1.500 | FLV::Video tag (interframe)
75
+ 1.515 | FLV::Audio tag
76
+ 1.567 | FLV::Audio tag
77
+ 1.600 | FLV::Video tag (interframe)
78
+ 1.619 | FLV::Audio tag
79
+ 1.671 | FLV::Audio tag
80
+ 1.700 | FLV::Video tag (interframe)
81
+ 1.724 | FLV::Audio tag
82
+ 1.776 | FLV::Audio tag
83
+ 1.800 | FLV::Video tag (interframe)
84
+ 1.828 | FLV::Audio tag
85
+ 1.880 | FLV::Audio tag
86
+ 1.900 | FLV::Video tag (interframe)
87
+ 1.933 | FLV::Audio tag
88
+ 1.985 | FLV::Audio tag
89
+ 2.000 | FLV::Video tag (interframe)
90
+ 2.037 | FLV::Audio tag
91
+ 2.089 | FLV::Audio tag
92
+ 2.100 | FLV::Video tag (interframe)
93
+ 2.142 | FLV::Audio tag
94
+ 2.194 | FLV::Audio tag
95
+ 2.200 | FLV::Video tag (interframe)
96
+ 2.246 | FLV::Audio tag
97
+ 2.298 | FLV::Audio tag
98
+ 2.300 | FLV::Video tag (interframe)
99
+ 2.351 | FLV::Audio tag
100
+ 2.400 | FLV::Video tag (interframe)
101
+ 2.403 | FLV::Audio tag
102
+ 2.455 | FLV::Audio tag
103
+ 2.500 | FLV::Video tag (interframe)
104
+ 2.507 | FLV::Audio tag
105
+ 2.559 | FLV::Audio tag
106
+ 2.600 | FLV::Video tag (interframe)
107
+ 2.612 | FLV::Audio tag
108
+ 2.664 | FLV::Audio tag
109
+ 2.700 | FLV::Video tag (interframe)
110
+ 2.716 | FLV::Audio tag
111
+ 2.768 | FLV::Audio tag
112
+ 2.800 | FLV::Video tag (interframe)
113
+ 2.821 | FLV::Audio tag
114
+ 2.873 | FLV::Audio tag
115
+ 2.900 | FLV::Video tag (interframe)
116
+ 2.925 | FLV::Audio tag
117
+ 2.977 | FLV::Audio tag
118
+ 3.000 | FLV::Video tag (interframe)
119
+ 3.030 | FLV::Audio tag
120
+ 3.082 | FLV::Audio tag
121
+ 3.100 | FLV::Video tag (interframe)
122
+ 3.134 | FLV::Audio tag
123
+ 3.186 | FLV::Audio tag
124
+ 3.200 | FLV::Video tag (interframe)
125
+ 3.239 | FLV::Audio tag
126
+ 3.291 | FLV::Audio tag
127
+ 3.300 | FLV::Video tag (interframe)
128
+ 3.343 | FLV::Audio tag
129
+ 3.395 | FLV::Audio tag
130
+ 3.400 | FLV::Video tag (interframe)
131
+ 3.448 | FLV::Audio tag
132
+ 3.500 | FLV::Video tag (interframe)
@@ -0,0 +1,114 @@
1
+ *** command:
2
+ --Cut .150- --Debug
3
+ *** result:
4
+ Header| ./test/fixtures/short.flv
5
+ | extra :
6
+ | has_audio : true
7
+ | has_video : true
8
+ | version : 1
9
+ 0.000 | FLV::Audio tag
10
+ | channel : mono
11
+ | codec_id : 2
12
+ | format : MP3
13
+ | rate : 11000
14
+ | sample_size : 16
15
+ 0.044 | FLV::Video tag (keyframe)
16
+ | codec : on2_vp6
17
+ | codec_id : 4
18
+ | dimensions : nil
19
+ 0.052 | FLV::Audio tag
20
+ 0.105 | FLV::Audio tag
21
+ 0.144 | FLV::Video tag (interframe)
22
+ 0.157 | FLV::Audio tag
23
+ 0.209 | FLV::Audio tag
24
+ 0.244 | FLV::Video tag (interframe)
25
+ 0.261 | FLV::Audio tag
26
+ 0.314 | FLV::Audio tag
27
+ 0.344 | FLV::Video tag (interframe)
28
+ 0.366 | FLV::Audio tag
29
+ 0.418 | FLV::Audio tag
30
+ 0.444 | FLV::Video tag (interframe)
31
+ 0.470 | FLV::Audio tag
32
+ 0.523 | FLV::Audio tag
33
+ 0.544 | FLV::Video tag (interframe)
34
+ 0.575 | FLV::Audio tag
35
+ 0.627 | FLV::Audio tag
36
+ 0.644 | FLV::Video tag (interframe)
37
+ 0.679 | FLV::Audio tag
38
+ 0.732 | FLV::Audio tag
39
+ 0.744 | FLV::Video tag (interframe)
40
+ 0.784 | FLV::Audio tag
41
+ 0.836 | FLV::Audio tag
42
+ 0.844 | FLV::Video tag (interframe)
43
+ 0.888 | FLV::Audio tag
44
+ 0.941 | FLV::Audio tag
45
+ 0.944 | FLV::Video tag (interframe)
46
+ 0.993 | FLV::Audio tag
47
+ 1.044 | FLV::Video tag (interframe)
48
+ 1.045 | FLV::Audio tag
49
+ 1.097 | FLV::Audio tag
50
+ 1.144 | FLV::Video tag (interframe)
51
+ 1.150 | FLV::Audio tag
52
+ 1.202 | FLV::Audio tag
53
+ 1.244 | FLV::Video tag (interframe)
54
+ 1.254 | FLV::Audio tag
55
+ 1.306 | FLV::Audio tag
56
+ 1.344 | FLV::Video tag (interframe)
57
+ 1.359 | FLV::Audio tag
58
+ 1.411 | FLV::Audio tag
59
+ 1.444 | FLV::Video tag (interframe)
60
+ 1.463 | FLV::Audio tag
61
+ 1.515 | FLV::Audio tag
62
+ 1.544 | FLV::Video tag (interframe)
63
+ 1.568 | FLV::Audio tag
64
+ 1.620 | FLV::Audio tag
65
+ 1.644 | FLV::Video tag (interframe)
66
+ 1.672 | FLV::Audio tag
67
+ 1.724 | FLV::Audio tag
68
+ 1.744 | FLV::Video tag (interframe)
69
+ 1.777 | FLV::Audio tag
70
+ 1.829 | FLV::Audio tag
71
+ 1.844 | FLV::Video tag (interframe)
72
+ 1.881 | FLV::Audio tag
73
+ 1.933 | FLV::Audio tag
74
+ 1.944 | FLV::Video tag (interframe)
75
+ 1.986 | FLV::Audio tag
76
+ 2.038 | FLV::Audio tag
77
+ 2.044 | FLV::Video tag (interframe)
78
+ 2.090 | FLV::Audio tag
79
+ 2.142 | FLV::Audio tag
80
+ 2.144 | FLV::Video tag (interframe)
81
+ 2.195 | FLV::Audio tag
82
+ 2.244 | FLV::Video tag (interframe)
83
+ 2.247 | FLV::Audio tag
84
+ 2.299 | FLV::Audio tag
85
+ 2.344 | FLV::Video tag (interframe)
86
+ 2.351 | FLV::Audio tag
87
+ 2.403 | FLV::Audio tag
88
+ 2.444 | FLV::Video tag (interframe)
89
+ 2.456 | FLV::Audio tag
90
+ 2.508 | FLV::Audio tag
91
+ 2.544 | FLV::Video tag (interframe)
92
+ 2.560 | FLV::Audio tag
93
+ 2.612 | FLV::Audio tag
94
+ 2.644 | FLV::Video tag (interframe)
95
+ 2.665 | FLV::Audio tag
96
+ 2.717 | FLV::Audio tag
97
+ 2.744 | FLV::Video tag (interframe)
98
+ 2.769 | FLV::Audio tag
99
+ 2.821 | FLV::Audio tag
100
+ 2.844 | FLV::Video tag (interframe)
101
+ 2.874 | FLV::Audio tag
102
+ 2.926 | FLV::Audio tag
103
+ 2.944 | FLV::Video tag (interframe)
104
+ 2.978 | FLV::Audio tag
105
+ 3.030 | FLV::Audio tag
106
+ 3.044 | FLV::Video tag (interframe)
107
+ 3.083 | FLV::Audio tag
108
+ 3.135 | FLV::Audio tag
109
+ 3.144 | FLV::Video tag (interframe)
110
+ 3.187 | FLV::Audio tag
111
+ 3.239 | FLV::Audio tag
112
+ 3.244 | FLV::Video tag (interframe)
113
+ 3.292 | FLV::Audio tag
114
+ 3.344 | FLV::Video tag (interframe)
@@ -0,0 +1,20 @@
1
+ *** command:
2
+ --Cut .150-.300 --keyframe_mode --Debug
3
+ *** result:
4
+ Header| ./test/fixtures/short.flv
5
+ | extra :
6
+ | has_audio : true
7
+ | has_video : true
8
+ | version : 1
9
+ 0.000 | FLV::Video tag (keyframe)
10
+ | codec : on2_vp6
11
+ | codec_id : 4
12
+ | dimensions : nil
13
+ 0.008 | FLV::Audio tag
14
+ | channel : mono
15
+ | codec_id : 2
16
+ | format : MP3
17
+ | rate : 11000
18
+ | sample_size : 16
19
+ 0.061 | FLV::Audio tag
20
+ 0.100 | FLV::Video tag (interframe)
@@ -0,0 +1,132 @@
1
+ *** command:
2
+ --Debug
3
+ *** result:
4
+ Header| ./test/fixtures/short.flv
5
+ | extra :
6
+ | has_audio : true
7
+ | has_video : true
8
+ | version : 1
9
+ 0.000 | FLV::Event tag
10
+ | event : onMetaData
11
+ | audiocodecid : 2
12
+ | audiodatarate : 16
13
+ | audiodelay : 0
14
+ | canSeekToEnd : 1
15
+ | creationdate : Fri Feb 03 122553 2006\n
16
+ | duration : 16.9
17
+ | framerate : 10
18
+ | height : 154
19
+ | videocodecid : 4
20
+ | videodatarate : 40
21
+ | width : 192
22
+ 0.000 | FLV::Audio tag
23
+ | channel : mono
24
+ | codec_id : 2
25
+ | format : MP3
26
+ | rate : 11000
27
+ | sample_size : 16
28
+ 0.000 | FLV::Video tag (keyframe)
29
+ | codec : on2_vp6
30
+ | codec_id : 4
31
+ | dimensions : nil
32
+ 0.052 | FLV::Audio tag
33
+ 0.100 | FLV::Video tag (interframe)
34
+ 0.104 | FLV::Audio tag
35
+ 0.156 | FLV::Audio tag
36
+ 0.200 | FLV::Video tag (keyframe)
37
+ 0.208 | FLV::Audio tag
38
+ 0.261 | FLV::Audio tag
39
+ 0.300 | FLV::Video tag (interframe)
40
+ 0.313 | FLV::Audio tag
41
+ 0.365 | FLV::Audio tag
42
+ 0.400 | FLV::Video tag (interframe)
43
+ 0.417 | FLV::Audio tag
44
+ 0.470 | FLV::Audio tag
45
+ 0.500 | FLV::Video tag (interframe)
46
+ 0.522 | FLV::Audio tag
47
+ 0.574 | FLV::Audio tag
48
+ 0.600 | FLV::Video tag (interframe)
49
+ 0.626 | FLV::Audio tag
50
+ 0.679 | FLV::Audio tag
51
+ 0.700 | FLV::Video tag (interframe)
52
+ 0.731 | FLV::Audio tag
53
+ 0.783 | FLV::Audio tag
54
+ 0.800 | FLV::Video tag (interframe)
55
+ 0.835 | FLV::Audio tag
56
+ 0.888 | FLV::Audio tag
57
+ 0.900 | FLV::Video tag (interframe)
58
+ 0.940 | FLV::Audio tag
59
+ 0.992 | FLV::Audio tag
60
+ 1.000 | FLV::Video tag (interframe)
61
+ 1.044 | FLV::Audio tag
62
+ 1.097 | FLV::Audio tag
63
+ 1.100 | FLV::Video tag (interframe)
64
+ 1.149 | FLV::Audio tag
65
+ 1.200 | FLV::Video tag (interframe)
66
+ 1.201 | FLV::Audio tag
67
+ 1.253 | FLV::Audio tag
68
+ 1.300 | FLV::Video tag (interframe)
69
+ 1.306 | FLV::Audio tag
70
+ 1.358 | FLV::Audio tag
71
+ 1.400 | FLV::Video tag (interframe)
72
+ 1.410 | FLV::Audio tag
73
+ 1.462 | FLV::Audio tag
74
+ 1.500 | FLV::Video tag (interframe)
75
+ 1.515 | FLV::Audio tag
76
+ 1.567 | FLV::Audio tag
77
+ 1.600 | FLV::Video tag (interframe)
78
+ 1.619 | FLV::Audio tag
79
+ 1.671 | FLV::Audio tag
80
+ 1.700 | FLV::Video tag (interframe)
81
+ 1.724 | FLV::Audio tag
82
+ 1.776 | FLV::Audio tag
83
+ 1.800 | FLV::Video tag (interframe)
84
+ 1.828 | FLV::Audio tag
85
+ 1.880 | FLV::Audio tag
86
+ 1.900 | FLV::Video tag (interframe)
87
+ 1.933 | FLV::Audio tag
88
+ 1.985 | FLV::Audio tag
89
+ 2.000 | FLV::Video tag (interframe)
90
+ 2.037 | FLV::Audio tag
91
+ 2.089 | FLV::Audio tag
92
+ 2.100 | FLV::Video tag (interframe)
93
+ 2.142 | FLV::Audio tag
94
+ 2.194 | FLV::Audio tag
95
+ 2.200 | FLV::Video tag (interframe)
96
+ 2.246 | FLV::Audio tag
97
+ 2.298 | FLV::Audio tag
98
+ 2.300 | FLV::Video tag (interframe)
99
+ 2.351 | FLV::Audio tag
100
+ 2.400 | FLV::Video tag (interframe)
101
+ 2.403 | FLV::Audio tag
102
+ 2.455 | FLV::Audio tag
103
+ 2.500 | FLV::Video tag (interframe)
104
+ 2.507 | FLV::Audio tag
105
+ 2.559 | FLV::Audio tag
106
+ 2.600 | FLV::Video tag (interframe)
107
+ 2.612 | FLV::Audio tag
108
+ 2.664 | FLV::Audio tag
109
+ 2.700 | FLV::Video tag (interframe)
110
+ 2.716 | FLV::Audio tag
111
+ 2.768 | FLV::Audio tag
112
+ 2.800 | FLV::Video tag (interframe)
113
+ 2.821 | FLV::Audio tag
114
+ 2.873 | FLV::Audio tag
115
+ 2.900 | FLV::Video tag (interframe)
116
+ 2.925 | FLV::Audio tag
117
+ 2.977 | FLV::Audio tag
118
+ 3.000 | FLV::Video tag (interframe)
119
+ 3.030 | FLV::Audio tag
120
+ 3.082 | FLV::Audio tag
121
+ 3.100 | FLV::Video tag (interframe)
122
+ 3.134 | FLV::Audio tag
123
+ 3.186 | FLV::Audio tag
124
+ 3.200 | FLV::Video tag (interframe)
125
+ 3.239 | FLV::Audio tag
126
+ 3.291 | FLV::Audio tag
127
+ 3.300 | FLV::Video tag (interframe)
128
+ 3.343 | FLV::Audio tag
129
+ 3.395 | FLV::Audio tag
130
+ 3.400 | FLV::Video tag (interframe)
131
+ 3.448 | FLV::Audio tag
132
+ 3.500 | FLV::Video tag (interframe)
@@ -0,0 +1,18 @@
1
+ *** command:
2
+ --Debug 0.3
3
+ *** result:
4
+ 0.200 | FLV::Video tag (keyframe)
5
+ | codec : on2_vp6
6
+ | codec_id : 4
7
+ | dimensions : nil
8
+ 0.208 | FLV::Audio tag
9
+ | channel : mono
10
+ | codec_id : 2
11
+ | format : MP3
12
+ | rate : 11000
13
+ | sample_size : 16
14
+ 0.261 | FLV::Audio tag
15
+ 0.300 | FLV::Video tag (interframe)
16
+ 0.313 | FLV::Audio tag
17
+ 0.365 | FLV::Audio tag
18
+ 0.400 | FLV::Video tag (interframe)
@@ -0,0 +1,32 @@
1
+ *** command:
2
+ --Debug 0.301-1
3
+ *** result:
4
+ 0.313 | FLV::Audio tag
5
+ | channel : mono
6
+ | codec_id : 2
7
+ | format : MP3
8
+ | rate : 11000
9
+ | sample_size : 16
10
+ 0.365 | FLV::Audio tag
11
+ 0.400 | FLV::Video tag (interframe)
12
+ | codec : on2_vp6
13
+ | codec_id : 4
14
+ | dimensions : nil
15
+ 0.417 | FLV::Audio tag
16
+ 0.470 | FLV::Audio tag
17
+ 0.500 | FLV::Video tag (interframe)
18
+ 0.522 | FLV::Audio tag
19
+ 0.574 | FLV::Audio tag
20
+ 0.600 | FLV::Video tag (interframe)
21
+ 0.626 | FLV::Audio tag
22
+ 0.679 | FLV::Audio tag
23
+ 0.700 | FLV::Video tag (interframe)
24
+ 0.731 | FLV::Audio tag
25
+ 0.783 | FLV::Audio tag
26
+ 0.800 | FLV::Video tag (interframe)
27
+ 0.835 | FLV::Audio tag
28
+ 0.888 | FLV::Audio tag
29
+ 0.900 | FLV::Video tag (interframe)
30
+ 0.940 | FLV::Audio tag
31
+ 0.992 | FLV::Audio tag
32
+ 1.000 | FLV::Video tag (interframe)