activevlc 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.rspec +1 -0
  4. data/Gemfile +5 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +89 -0
  7. data/Rakefile +1 -0
  8. data/TODO.md +12 -0
  9. data/activevlc.gemspec +29 -0
  10. data/bin/activevlc +5 -0
  11. data/examples/design.rb +84 -0
  12. data/lib/activevlc/cli/vlc.rb +45 -0
  13. data/lib/activevlc/cli.rb +73 -0
  14. data/lib/activevlc/dsl/base.rb +35 -0
  15. data/lib/activevlc/dsl/duplicate.rb +16 -0
  16. data/lib/activevlc/dsl/pipeline.rb +31 -0
  17. data/lib/activevlc/dsl/stream.rb +75 -0
  18. data/lib/activevlc/dsl/transcode.rb +56 -0
  19. data/lib/activevlc/dsl.rb +22 -0
  20. data/lib/activevlc/pipeline.rb +37 -0
  21. data/lib/activevlc/pipeline_dump.rb +61 -0
  22. data/lib/activevlc/stage/base.rb +75 -0
  23. data/lib/activevlc/stage/chain.rb +18 -0
  24. data/lib/activevlc/stage/duplicate.rb +38 -0
  25. data/lib/activevlc/stage/gather.rb +18 -0
  26. data/lib/activevlc/stage/input.rb +41 -0
  27. data/lib/activevlc/stage/stream.rb +33 -0
  28. data/lib/activevlc/stage/transcode.rb +18 -0
  29. data/lib/activevlc/stage.rb +23 -0
  30. data/lib/activevlc/version.rb +3 -0
  31. data/lib/activevlc.rb +7 -0
  32. data/spec/basic_pipe_spec.rb +29 -0
  33. data/spec/basic_spec.rb +40 -0
  34. data/spec/pipeline_dump_spec.rb +38 -0
  35. data/spec/pipeline_spec.rb +84 -0
  36. data/spec/pipes/basic.rb +14 -0
  37. data/spec/pipes/duplicate.rb +18 -0
  38. data/spec/pipes/duplicate_then_transcode.rb +29 -0
  39. data/spec/pipes/transcode_and_display.rb +25 -0
  40. data/spec/pipes/transcode_and_display_with_options.rb +36 -0
  41. data/spec/spec_helper.rb +37 -0
  42. data/spec/stage_spec.rb +48 -0
  43. metadata +196 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2cfe489b2cfbfad5e9f2e34f8047568c0d0d2308
4
+ data.tar.gz: bcb80b8ed6a3cd149d0a2d394885ee46ba780ca8
5
+ SHA512:
6
+ metadata.gz: f7c078deb42fcad7eec5913ea57f994552e123e1293911b2e2c48eb52367e896d62b81e88371878d06a20604b362d073907312650ef45dd2d8f4f2227be11477
7
+ data.tar.gz: 01ac07764a7d0b86bebc5b816f0a2f900391909214e93f74d08f14ee443286b1065d3ee7e0b43ba2c0d31ef3958eea704af5bacacbea99151336ffe116bb36fb
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ -fd --color
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in activevlc.gemspec
4
+ gemspec
5
+
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Julien 'Lta' BALLET
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,89 @@
1
+ # ActiveVlc
2
+
3
+ Do you know VLC, the famous media player ? I'm pretty sure you do !
4
+ Do you know this is also a pretty powerfull media processing and streaming framework ? Maybe...
5
+ Do you understand something about the command line syntax to access vlc's underlying
6
+ powers ? If you don't this tool is for you !
7
+
8
+ ActiveVlc provides a simple syntax to configure and run transcoding/streaming/processing
9
+ operations using VLC. Here's a simple example :
10
+
11
+ ## Example
12
+
13
+ Let's say you want to read an mp4 file, transcode it using different options, save the result to
14
+ another file while displaying it to control what's happening. Using the standard vlc's chain syntax
15
+ you'd have to write
16
+
17
+ vlc input.mp4 :sout="#transcode{deinterlace, acodec=aac, ab=128, channels=2, vcodec=h264, venc=x264{bpyramid=strict, bframes=4, no-cabac}, vb=512}:duplicate{dst=standard{mux=mp4, dst='output.mp4'}, dst=display}"
18
+
19
+ Not very readable isn't it ? Let's try the same with ActiveVlc :
20
+
21
+ ```ruby
22
+ AtiveVlc::Pipeline.for 'input.mp4' do
23
+ transcode do
24
+ deinterlace
25
+ audio :aac do
26
+ bitrate 128 # 128 kpbs
27
+ channels 2
28
+ end
29
+ video :h264 do
30
+ encoder :x264 do
31
+ bpyramid :strict
32
+ bframes 4
33
+ cabac false
34
+ end
35
+ bitrate 512 # 512 kbps
36
+ end
37
+ end
38
+ duplicate do
39
+ to :file do
40
+ mux :mp4
41
+ dst 'output.mp4'
42
+ end
43
+ to :display
44
+ end
45
+ end
46
+ ```
47
+
48
+ This sintax might be a lot more verbose than the original vlc's one,
49
+ it is still A LOT more readable and understandable, and since this is plain ruby
50
+ you can add comment and arbitrary code !
51
+ Then you can run it using :
52
+
53
+ activevlc exec /path/to/the/pipeline.rb
54
+
55
+ ## Development status
56
+
57
+ This gem is not yet published yet and is still under active
58
+ development althought it might already be usable for many usages
59
+
60
+ ## Installation
61
+
62
+ First and foremost, you must have VLC installed on your system and the
63
+ vlc binary must be in your PATH since we doesn't provide yet a cool
64
+ configuration system for this (contribution welcomed !)
65
+
66
+ Add this line to your application's Gemfile:
67
+
68
+ gem 'activevlc'
69
+
70
+ And then execute:
71
+
72
+ $ bundle
73
+
74
+ Or install it yourself as:
75
+
76
+ $ gem install activevlc
77
+
78
+ ## Usage
79
+
80
+ Currently, the best documentation is to have a look to the spec (/spec/pipes)
81
+ or to run the CLI tool to get the embedded help.
82
+
83
+ ## Contributing
84
+
85
+ 1. Fork it
86
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
87
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
88
+ 4. Push to the branch (`git push origin my-new-feature`)
89
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/TODO.md ADDED
@@ -0,0 +1,12 @@
1
+ TODO file for ActiveVlc
2
+ =======================
3
+
4
+ - Portable vlc version detection and configuration
5
+ - vlc process management
6
+ - Preset support (this is also a cool way of documenting vlc's features
7
+ - vlc team suggestions (jb/etix)
8
+ - Some syntactic sugar for http-live will be helpfull, pay attention to this shitty module
9
+ - duplicate -> transcode, transcode -> duplicate
10
+ - Long-term ideas
11
+ - carrierwave integration
12
+
data/activevlc.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'activevlc/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "activevlc"
8
+ spec.version = ActiveVlc::VERSION
9
+ spec.authors = ["Julien 'Lta' BALLET"]
10
+ spec.email = ["contact@lta.io"]
11
+ spec.summary = %q{DSL for building VLC pipelines}
12
+ spec.description = %q{ActiveVlc provides a convenient DSL to build VLC transcoding and/or streaming pipelines}
13
+ spec.homepage = "http://github.com/elthariel/activevlc"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rspec", "~> 2.6"
23
+ spec.add_development_dependency "simplecov"
24
+ spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "debugger"
26
+
27
+ spec.add_dependency 'thor'
28
+ spec.add_dependency 'activesupport'
29
+ end
data/bin/activevlc ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'activevlc/cli'
4
+
5
+ ActiveVlc::Cli.start
@@ -0,0 +1,84 @@
1
+ ##
2
+ ## design.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Wed Jun 12 01:18:11 2013 Lta Akr
5
+ ##
6
+ ## Author(s):
7
+ ## - Julien 'Lta' BALLET <contact@lta.io>
8
+ ##
9
+ ## Copyright (C) 2013 Julien 'Lta' BALLET
10
+
11
+ # This example isn't supposed to work yet. It justs document what it's
12
+ # supposed to look like when it's ready
13
+
14
+ pipe_for 'file.mp4' do |pipe|
15
+ transcode do
16
+ audio do
17
+ codec :aac do
18
+ rc_method :vbr
19
+ psy_model :test1
20
+ end
21
+ bitrate 256
22
+ end
23
+ video :h264 do
24
+ encoder :qsv
25
+ async_depth 6
26
+ h264_level '5.1'
27
+ end
28
+ end
29
+ deinterlace
30
+
31
+ duplicate do
32
+ to :dst do
33
+ caching 300
34
+ muxer 'mp4'
35
+ path '/tmp/test.mp4'
36
+ end
37
+ to :rtp do
38
+ caching 1500
39
+ muxer :ts
40
+ dst '192.168.0.1:4567'
41
+ end
42
+ to_display
43
+ end
44
+ end
45
+
46
+
47
+
48
+ #
49
+ # Kind of memory representation of the next pipeline
50
+ # Pipeline
51
+ # @stages =
52
+ # - Stage (@type = :transcode)
53
+ # @options = {
54
+ # acodec = {
55
+ # _this_: :aac,
56
+ # opt1: 'test',
57
+ # opt1: 'test',
58
+ # }
59
+ # }
60
+ # - DuplicateStage (@type = :duplicate)
61
+ # @substages =
62
+ # - Stage (@type = :standard)
63
+ # @options = {
64
+ # mux: 'mp4'
65
+ # dst: 'output.mp4'
66
+ # }
67
+ #
68
+ ActiveVlc::pipe_for 'input.mp4' do
69
+ transcode do
70
+ audio :aac do
71
+ opt1 'test'
72
+ opt2 'caca'
73
+ opt3 42
74
+ end
75
+ video :h264
76
+ end
77
+ duplicate do
78
+ to :file do
79
+ mux :mp4
80
+ dst 'output.mp4'
81
+ end
82
+ to :display
83
+ end
84
+ end
@@ -0,0 +1,45 @@
1
+ ##
2
+ ## version.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Wed Sep 4 15:44:38 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ module ActiveVlc::CLI
13
+ class Vlc < Thor
14
+ desc 'version', 'reports currently found VLC version and if it is supported'
15
+ def version
16
+ v = _version
17
+ if v
18
+ puts "VLC version #{v[0]}.#{v[1]}.#{v[2]} (supported = #{_supported})"
19
+ else
20
+ puts "vlc binary NOT FOUND (probably not in $PATH)"
21
+ end
22
+ end
23
+
24
+
25
+ desc 'supported', 'returns whether the found vlc version is supported or not'
26
+ def supported
27
+ puts _supported
28
+ end
29
+
30
+ private
31
+ def _version
32
+ version_string = `vlc --version 2>&1`
33
+ if version_string =~ /version (\d+)\.(\d)+\.(\d)+/
34
+ [$1, $2, $3].map &:to_i
35
+ else
36
+ nil
37
+ end
38
+ end
39
+
40
+ def _supported
41
+ v = _version
42
+ v and v[0] == 2
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,73 @@
1
+ ##
2
+ ## cli.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Wed Jun 12 14:22:50 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ require 'activevlc'
13
+ require 'thor'
14
+
15
+ # Create the CLI module before loading CLI classes.
16
+ module ActiveVlc::CLI
17
+ end
18
+
19
+ require 'activevlc/cli/vlc'
20
+
21
+
22
+
23
+ module ActiveVlc
24
+ class Cli < Thor
25
+ package_name "ActiveVlc"
26
+
27
+ desc 'version', 'Show current ActiveVlc version'
28
+ def version
29
+ puts "ActiveVlc version #{ActiveVlc::VERSION}"
30
+ end
31
+
32
+ desc 'vlc SUBCOMMAND ...ARGS', 'vlc specific commands'
33
+ subcommand 'vlc', ActiveVlc::CLI::Vlc
34
+
35
+ desc 'fragment PIPE_PATH', 'Outputs vlc :sout=chain fragment for the pipe defined in \'PIPE_PATH\' file'
36
+ def fragment(path)
37
+ if File.readable?(path)
38
+ pipe = eval(File.read(path))
39
+ puts pipe.fragment
40
+ else
41
+ puts "Error: file [#{path}] doesn't exist or reading permission denied."
42
+ exit 42
43
+ end
44
+ end
45
+
46
+ desc 'exec PIPE_PATH', 'Run the PIPE_PATH pipe file in VLC'
47
+ def exec(path)
48
+ if File.readable?(path)
49
+ begin
50
+ pipe = eval(File.read(path))
51
+ fragment = pipe.fragment
52
+ rescue
53
+ puts "Error while parsing pipe file"
54
+ exit 43
55
+ end
56
+ Kernel.exec "cvlc -vvv --play-and-exit #{fragment}"
57
+ else
58
+ puts "Error: file [#{path}] doesn't exist or reading permission denied."
59
+ end
60
+ exit $?.exitstatus
61
+ end
62
+
63
+ desc 'dump PIPE_PATH', 'Dump the internal representation of the pipeline defined in the file PIPE_PATH'
64
+ def dump(path)
65
+ if File.readable?(path)
66
+ puts eval(File.read(path)).dump
67
+ else
68
+ puts "Error: file [#{path}] doesn't exist or reading permission denied."
69
+ exit 42
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,35 @@
1
+ ##
2
+ ## base.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Wed Jun 12 20:59:51 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ module ActiveVlc::DSL
13
+ class Base
14
+ def initialize(context)
15
+ @context = context
16
+ end
17
+
18
+ def method_missing(sym, *args, &block)
19
+ __option(normalize_option(sym), args.first, &block)
20
+ end
21
+
22
+ protected
23
+ def normalize_option(name) name.to_s.downcase.gsub('_', '-') end
24
+
25
+ def __option(name, value, &block)
26
+ if block_given?
27
+ subcontext = { _this_: value }
28
+ Base.new(subcontext).instance_eval &block
29
+ @context[name] = subcontext
30
+ else
31
+ @context[name] = value
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,16 @@
1
+ ##
2
+ ## duplicate.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Fri Sep 6 15:56:10 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ module ActiveVlc::DSL
13
+ class Duplicate < Stream
14
+
15
+ end
16
+ end
@@ -0,0 +1,31 @@
1
+ ##
2
+ ## pipeline.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Wed Jun 12 21:00:28 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ module ActiveVlc::DSL
13
+ module Pipeline
14
+ extend ActiveSupport::Concern
15
+
16
+ module ClassMethods
17
+ def parse(path)
18
+ return nil unless File.exists?(path)
19
+
20
+ # FIXME I hope to find some cleaner way to do this at some point
21
+ eval(File.open(path).read, nil, path, 0)
22
+ end
23
+
24
+ def for(*inputs, &block)
25
+ pipeline = new(inputs)
26
+ ::ActiveVlc::DSL::Stream.new(pipeline.sout).instance_eval(&block) if block_given?
27
+ pipeline
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,75 @@
1
+ ##
2
+ ## stream.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Thu Sep 5 11:13:44 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ module ActiveVlc::DSL
13
+ class Stream < Base
14
+ # FIXME refactor more DRY
15
+ def method_missing(sym, *args, &block)
16
+ begin
17
+ klass = ActiveVlc::Stage.const_get sym.to_s.capitalize.to_sym
18
+ rescue
19
+ klass = ActiveVlc::Stage::Base
20
+ args.unshift(sym)
21
+ end
22
+
23
+ begin
24
+ dsl_klass = ActiveVlc::DSL.const_get sym.to_s.capitalize.to_sym
25
+ rescue
26
+ dsl_klass = ActiveVlc::DSL::Base
27
+ end
28
+
29
+ add_substage(klass, dsl_klass, *args, &block)
30
+ end
31
+
32
+ # FIXME This method contains some dirty syntactic sugar as a PoC and need refactor
33
+ def to(sym_or_hash, &block)
34
+ if sym_or_hash.is_a?(Hash)
35
+ type, opt = sym_or_hash.first
36
+ else
37
+ type, opt = [sym_or_hash]
38
+ end
39
+
40
+ if type == :chain
41
+ to_chain(&block)
42
+ elsif [:file, :standard, :std].include? type
43
+ to_file(opt, &block)
44
+ else
45
+ stage = ActiveVlc::Stage::Base.new(type)
46
+ # Evaluate against the DSL if a block is given
47
+ ActiveVlc::DSL::Base.new(stage).instance_eval(&block) if block_given?
48
+ @context << stage
49
+ end
50
+ end
51
+
52
+ def to_chain(&block)
53
+ chain = ActiveVlc::Stage::Chain.new
54
+ ActiveVlc::DSL::Stream.new(chain).instance_eval(&block) if block_given?
55
+ @context << chain
56
+ end
57
+
58
+ def to_file(dst = nil, &block)
59
+ stage = ActiveVlc::Stage::Base.new(:standard)
60
+ stage[:dst] = dst if dst
61
+
62
+ # Evaluate against the DSL if a block is given
63
+ ActiveVlc::DSL::Base.new(stage).instance_eval(&block) if block_given?
64
+ @context << stage
65
+ end
66
+
67
+ protected
68
+ def add_substage(stage_klass, dsl_klass, *args, &block)
69
+ stage = stage_klass.new(*args)
70
+ @context << stage
71
+ dsl = dsl_klass.new(stage)
72
+ dsl.instance_eval &block if block_given?
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,56 @@
1
+ ##
2
+ ## transcode.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Fri Sep 6 16:04:12 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ module ActiveVlc::DSL
13
+ class Transcode < Base
14
+ def audio(codec, &block)
15
+ __option :acodec, codec
16
+ TranscodeAudio.new(@context).instance_eval &block if block_given?
17
+ end
18
+ def video(codec, &block)
19
+ __option :vcodec, codec
20
+ TranscodeVideo.new(@context).instance_eval &block if block_given?
21
+ end
22
+ def subtitle(codec, &block)
23
+ __option :scodec, codec
24
+ TranscodeSubtitle.new(@context).instance_eval &block if block_given?
25
+ end
26
+ end
27
+
28
+
29
+ # Syntactic sugar classes for different type of streams
30
+ class TranscodeAudio < Base
31
+ def bitrate(val)
32
+ __option :ab, val
33
+ end
34
+ def encoder(val, &block)
35
+ __option :aenc, val, &block
36
+ end
37
+ end
38
+
39
+ class TranscodeVideo < Base
40
+ def bitrate(val)
41
+ __option :vb, val
42
+ end
43
+ def encoder(val, &block)
44
+ __option :venc, val, &block
45
+ end
46
+ end
47
+
48
+ class TranscodeSubtitle
49
+ def encoder(val, &block)
50
+ __option :senc, val, block
51
+ end
52
+ def filter(val)
53
+ __option :sfilter, val
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,22 @@
1
+ ##
2
+ ## dsl.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Wed Jun 12 20:48:40 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ module ActiveVlc
13
+ module DSL
14
+ end
15
+ end
16
+
17
+ require 'activevlc/pipeline'
18
+ require 'activevlc/dsl/base'
19
+ require 'activevlc/dsl/pipeline'
20
+ require 'activevlc/dsl/stream'
21
+ require 'activevlc/dsl/transcode'
22
+ require 'activevlc/dsl/duplicate'
@@ -0,0 +1,37 @@
1
+ ##
2
+ ## pipeline.rb
3
+ ## Login : <lta@still>
4
+ ## Started on Wed Jun 12 20:46:52 2013 Lta Akr
5
+ ## $Id$
6
+ ##
7
+ ## Author(s):
8
+ ## - Lta Akr <>
9
+ ##
10
+ ## Copyright (C) 2013 Lta Akr
11
+
12
+ require 'activevlc/pipeline_dump'
13
+ require 'activevlc/stage'
14
+ require 'activevlc/dsl/pipeline'
15
+
16
+ module ActiveVlc
17
+ class Pipeline
18
+ include DSL::Pipeline
19
+ include PipelineDump
20
+
21
+ attr_reader :input, :sout
22
+
23
+ def initialize(input_array_or_string)
24
+ @input = Stage::Input.new(input_array_or_string)
25
+ @sout = Stage::Stream.new # SOut = Stream Out
26
+ end
27
+
28
+ def fragment
29
+ [@input.fragment, @sout.fragment].join ' '
30
+ end
31
+
32
+ dump_childs { [input, sout] }
33
+ def dump
34
+ "ActiveVlc: Dumping pipeline internal representation\n" + _dump
35
+ end
36
+ end
37
+ end