activevlc 0.0.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 (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