ruby-****@sourc*****
ruby-****@sourc*****
2005年 3月 24日 (木) 21:54:31 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-pads-elem ------------------------- TITLE = Obteniendo puertos de un elemento KEYWORD = = Obteniendo puertos de un elemento {{link("tut-gst-plugins", nil, "tut-gst", "tut-gst-pads-caps")}} Como hemos visto en el cap$ByU(Bulo anterior (Gst::Element), los puertos (Gst::Pad) son el enlace de los elementos con el mundo exterior. El tipo espec$ByG(Bico de medio que un elemento puede manejat es mostrado en los puertos. La descripci$B(B de este tipo de medio se hace a trav$BqT(B de capacidades (Gst::Caps). Una vez que hemos creado un elemento, podemos obtener uno de sus puertos con: src_pad = element.get_pad("src") Este m$BqU(Bodo devuelve el puerto llamado "src" del elemento dado. De forma alternativa, puedes pedir la lista de puertos de un elemento. El siguiente c$B(Bigo imprime los nombre de todos los puertos de un elemento. element.each_pad do |pad| puts "pad name: " + pad.name end == Puertos din$BaN(Bicos Algunos elementod pueden no tener sus puertos cuando son creados. Esto ocurre, por ejemplo, con un demultiplexador MPEG2. El demultiplexador crearsus puertos en tiempo de ejecuci$B(B cuando detecte los diferentes streams b$BaT(Bicos en el sistema de stream MPEG2. Ejecutando (({gst-inspect mpegdemux})) se muestra que el elemento tiene solo un puerto: un puerto fuente llamado 'sink'. Los dem$BaT(B puertos est$BaO(B "dormidos" como se puede ver en la propiedad 'Exist: Sometimes'. Los puestos son creados dependiendo del tipo de archivo MPEG2 que reproduzcas. M$BaT(B adelante veremos que esto es muy importante a la hora de crear tuber$ByB(Bs din$BaN(Bicas. Puedes conectar una se$B(Bl a un elemento para que te informe cuando el elemento crea un nuevo puerto a partir de una de sus plantillas. El siguiente fragmento de c$B(Bigo muestra como hacerlo: # crea la tuber$ByB(B y hace algo $B(Bil pipeline = Gst::Pipeline.new ... mpeg2parser = Gst::ElementFactory.make("mpegdemux") mpeg2parser.signal_connect("new_pad") do |parser, pad| puts "un nuevo puerto #{pad.name} ha sido creado!" pipeline.pause if pad.name == "private_stream_1.0" # configura unaa tuber$ByB(B para un decodificador AC3 ... # enlaza el puerto a la tuber$ByB(B del decodificador AC3 ... end end # start the pipeline pipeline.play ... == Puertos bajo demanda Un elemento puede tener tambi$BqO(B puertos bajo demanda. Estos puertos no son creados autom$BaU(Bicamente, sino que son creados bajo demanda. Esto es muy $B(Bil para multiplexadores, agregadores y elementos tee. Un elemento tee, por ejemplo, tiene un puerto de entrada y una plantilla de puerto bajo demanda para las salidas. Cada vez que un elemento quiere obtener un puerto de salida del elemento tee, tiene que pedir el puerto. El siguiente c$B(Bigo puede ser usado para obtener un puerto del elemento tee. Tras solicitar el puerto, se puede usar para enlazarle a otro elemento. element = Gst::ElementFactory.make("tee") pad = element.request_pad("src%d") puts "new pad: " + pad.name El m$BqU(Bodo Gst::Element#request_pad puede ser usado para conseguir un puerto del elemento basado en la plantilla de nombre (name_template) o en la plantilla de puerto (pad_template) Tambi$BqO(B es posible obtener un puerto que sea compatible con otra plantilla de puerto. Es muy $B(Bil si se quiere enlazar un elemento a un elemento multiplexador y se necesita un puerto que sea compatible. Para pedir un puerto compatible se usa el m$BqU(Bodo Gst::Element#get_compatible_pad, como se ve en el siguiente ejemplo. element = Gst::ElementFactory.make("tee") mad = Gst::ElementFactory.make("mad") templ = mad.get_pad_template_by_name("sink") pad = element.get_compatible_pad(templ) puts "new pad: " = pad.name