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