[ruby-gnome2-doc-cvs] [Hiki] create - tut-gst-pads-elem

アーカイブの一覧に戻る

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






ruby-gnome2-cvs メーリングリストの案内
アーカイブの一覧に戻る