[ruby-gnome2-doc-cvs] [Hiki] create - tut-gst-queues

Back to archive index

ruby-gnome2-hiki-pt_BR****@sourc***** ruby-gnome2-hiki-pt_BR****@sourc*****
2004年 4月 11日 (日) 09:40:03 JST


-------------------------
REMOTE_ADDR = 200.216.145.78
REMOTE_HOST = 
        URL = http://ruby-gnome2.sourceforge.jp/pt_BR/?tut-gst-queues
-------------------------
= Filas ("Queues")
{{link("tut-gst-threads", nil, "tut-gst", nil)}}

Um Gst::Queue um elemento de filtro. Filas podem ser usadas para conectar dois elementos de uma maneira que os dados podem ser "buffered".

Um "buffer" que "sinked" para uma fila n縊 serempurrado automaticamente para o primo elemento conectado, mas ser"buffered". Ele serempurrado para o primo elemento t縊 logo um Gst::Pad#pull seja chamado no "pad" de origem da fila.

As filas s縊 usadas principalmente em conjunto com um Gst::Thread para fornecer uma conex縊 externa para os elementos de thread. Vocpoderia ter um thread alimentando "buffers" em uma Gst::Queue e outro thread chamando repetidamente Gst::Pad#pull na fila para alimentar seus elementos internos.

Abaixo estuma figura de um decodificador em dois threads. A gente tem um thread (o thread de execu鈬o principal) lendo os dados de um arquivo, e outro decodificando os dados. 

{{image_left("en:queue.png")}}
{{br}}

A implementa鈬o de fila de GStreamer padr縊 tem algumas propriedades que podem ser alteradas usando seus m騁odos de acesso. Para configurar o nero m痊imo de "buffers" que podem ser colocados na fila para 30, fa軋:

  queue.max_level = 30

O tocador de MP3 a seguir mostra a voccomo criar o "pipeline" cima usando um thread e uma fila.

  require 'gst'

  Gst.init
  unless ARGV.size == 1
      $stderr.puts "Uso: "{__FILE__} <arquivo mp3>"
      exit 1
  end

  playing = true

  # cria um novo thread para guardar os elementos
  thread = Gst::Thread.new

  # cria um novo "bin" para guardar os elementos
  bin = Gst::Bin.new

  # cria um leitor de disco
  filesrc = Gst::ElementFactory.make("filesrc")
  filesrc.location = ARGV.first
  filesrc.signal_connect("eos") do
      puts "tem fim de dados, saindo..."
      playing = false
  end

  # um decodificador
  decoder = Gst::ElementFactory.make("mad")

  # e um "sink" de 疼dio
  audiosink = Gst::ElementFactory.make("osssink")
  
  # cria uma fila
  queue = Gst::ElementFactory.make("queue")

  # adiciona objetos ao "bin" principal
  thread.add(decode, audiosink)
  bin.add(filesrc, queue, thread)

  # conecta os elementos
  filesrc >> queue >> decode >> audiosink

  # inicia a tocar
  bin.play

  while playing do
      bin.iterate
  end

  bin.stop





ruby-gnome2-cvs メーリングリストの案内
Back to archive index