ruby-****@sourc*****
ruby-****@sourc*****
2005年 3月 24日 (木) 22:10:10 JST
------------------------- REMOTE_ADDR = 213.37.10.235 REMOTE_HOST = REMOTE_USER = ruby-gnome2-hiki URL = http://ruby-gnome2.sourceforge.jp/cgi-bin/hiki/es/hiki.cgi?tut-gst-queues ------------------------- TITLE = Colas KEYWORD = = Colas {{link("tut-gst-threads", nil, "tut-gst", nil)}} Una Gst::Queue es un elemento de filtro. Las colas pueden ser usadas para conectar dos elementos de forma que el flujo de datos se pueda almacenar en un buffer. Un buffer que sea recibido por una Cola no serenviado autom$BaU(Bicamente al siguiente elemento enlazado, sino que se almacenaren un buffer. Se pasarel siguiente elemento tan pronto como se llame a Gst::Pad#pull en el puerto fuente de la cola. Las colas, por lo general, se usan en combinaci$B(B con un Gst::Thread para proporcionar un enlace con los elementos hilo. Se puede tener un hilo alimentando los buffers de una Gst::Queue y otro hilo llamando continuamente a Gst::Pad#pull en la cola para alimentar sus elementos internos. Abajo hay una figura de un decodificador de dos hilos. Tenemos un hilo (el hilo principal de ejecuci$B(B) leyendo datos de un fichero, y otro decodificando los datos. {{image_left("queue.png")}} {{br}} La implementaci$B(B de la cola est$BaO(Bdar GStreamer tiene algunas propiedades que pueden ser alteradas usando sus m$BqU(Bodos accesores. Para asignar el n$B(Bero m$BaY(Bimo de buffers que puede tener una cola a 30, hacemos: queue.max_level = 30 El siguiente reproductor MP3 muestra como crear la tuber$ByB(B anterior usando un hilo y una cola. require 'gst' Gst.init unless ARGV.size == 1 $stderr.puts "Usage: "{__FILE__} <mp3 filename>" exit 1 end playing = true # crea un nuevo hilo para almacenar los elementos thread = Gst::Thread.new # crea un nuevo contenedor para agrupar los elementos bin = Gst::Bin.new # crea el lector de disco filesrc = Gst::ElementFactory.make("filesrc") filesrc.location = ARGV.first filesrc.signal_connect("eos") do puts "have eos, quitting..." playing = false end # un decodificador decoder = Gst::ElementFactory.make("mad") # una salida de audio audiosink = Gst::ElementFactory.make("osssink") # crea la cola queue = Gst::ElementFactory.make("queue") # agrega los elementos al contenedor principal thread.add(decode, audiosink) bin.add(filesrc, queue, thread) # conecta los elementos filesrc >> queue >> decode >> audiosink # comienza la reproducci$B(B bin.play while playing do bin.iterate end bin.stop