<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Gstreamer ICE Transport</title>
	<atom:link href="http://gstice.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gstice.wordpress.com</link>
	<description>Streaming Distribuido con ICE y Gstreamer</description>
	<lastBuildDate>Wed, 14 Mar 2007 17:46:12 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='gstice.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/82c26ba6b30258cb0d14220f71ece3e4?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Gstreamer ICE Transport</title>
		<link>http://gstice.wordpress.com</link>
	</image>
			<item>
		<title>Control de flujo</title>
		<link>http://gstice.wordpress.com/2007/03/14/control-de-flujo/</link>
		<comments>http://gstice.wordpress.com/2007/03/14/control-de-flujo/#comments</comments>
		<pubDate>Wed, 14 Mar 2007 17:46:12 +0000</pubDate>
		<dc:creator>diegomartin</dc:creator>
				<category><![CDATA[Diseño]]></category>

		<guid isPermaLink="false">http://gstice.wordpress.com/2007/03/14/control-de-flujo/</guid>
		<description><![CDATA[Vamos a añadir algún tipo de control de flujo a la librería de nuestro proyecto. Actualmente el control de flujo que implementamos es muy primitivo.
He estado leyendo sobre RTP y RTCP en las últimas semanas. Su objetivo es transportar datos de tiempo real (como audio y vídeo) en un entorno como internet. RTP se dedica [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gstice.wordpress.com&blog=501332&post=12&subd=gstice&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><img src="http://revistaeidenar.univalle.edu.co/edicion3/caratula40.jpg" align="left" height="114" width="134" />Vamos a añadir algún tipo de control de flujo a la librería de nuestro proyecto. Actualmente el control de flujo que implementamos es muy primitivo.</p>
<p>He estado leyendo sobre RTP y RTCP en las últimas semanas. Su objetivo es transportar datos de tiempo real (como audio y vídeo) en un entorno como internet. RTP se dedica a mandar datos por un puerto UDP y RTCP se encarga del control de los datos (ver si han llegado correctamente, cuantos datos se han perdido, etc)</p>
<p>Podemos implementar un control de flujo similar al que tiene RTP. Utilizaremos canales de eventos de ZeroC ICE para transmitir por un lado los datos (tal y como hacíamos hasta ahora), y por otro lado la información de control. De esta manera podremos reenviar los datos que no hayan llegado a los receptores.</p>
<p>Tenéis más información en los links que os dejo.</p>
<p><strong>Referencias</strong></p>
<p><a href="http://www.rfc-editor.org/rfc/rfc3550.txt" title="RFC de RTP">RFC 3550 (RTP y RTCP)</a></p>
<p><a href="http://www.cs.columbia.edu/~hgs/rtp/" title="RTP Working Group">RTP Working Group</a></p>
<p><a href="http://www.geocities.com/intro_to_multimedia/RTP/index.html" title="RTP Easy Tutorial"> RTP Easy Tutorial</a></p>
<p><a href="http://www.iana.org/assignments/rtp-parameters" title="RTP Parameters">Parámetros RTP definidos por la IANA</a></p>
<p><a href="http://es.wikipedia.org/wiki/Real-time_Transport_Protocol">RTP en la Wikipedia</a></p>
<p><a href="http://es.wikipedia.org/wiki/Real_time_control_protocol">RTCP en la Wikipedia </a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gstice.wordpress.com/12/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gstice.wordpress.com/12/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gstice.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gstice.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gstice.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gstice.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gstice.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gstice.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gstice.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gstice.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gstice.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gstice.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gstice.wordpress.com&blog=501332&post=12&subd=gstice&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gstice.wordpress.com/2007/03/14/control-de-flujo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c1171098d365a263dc03ed555d1763fe?s=96&#38;d=identicon" medium="image">
			<media:title type="html">diegomartin</media:title>
		</media:content>

		<media:content url="http://revistaeidenar.univalle.edu.co/edicion3/caratula40.jpg" medium="image" />
	</item>
		<item>
		<title>Crear nuevos elementos para Gstreamer</title>
		<link>http://gstice.wordpress.com/2007/02/22/crear-nuevos-elementos-para-gstreamer/</link>
		<comments>http://gstice.wordpress.com/2007/02/22/crear-nuevos-elementos-para-gstreamer/#comments</comments>
		<pubDate>Thu, 22 Feb 2007 12:12:31 +0000</pubDate>
		<dc:creator>diegomartin</dc:creator>
				<category><![CDATA[GStreamer]]></category>

		<guid isPermaLink="false">http://gstice.wordpress.com/2007/02/22/crear-nuevos-elementos-para-gstreamer/</guid>
		<description><![CDATA[Os copio y pego la receta que hizo Oscar y que colgó en CrySoL el otro día.

Introducción
Cuando trabajas con Gstreamer, lo que utilizas son básicamente elementos (de hecho, GstElement es una clase abstracta muy alta en la jerarquía). Existen elementos para casi cualquier cosa: sink de audio pasa alsa, esd, oss; sinks de vídeo para [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gstice.wordpress.com&blog=501332&post=11&subd=gstice&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Os copio y pego la receta que hizo Oscar y que colgó en <a href="http://crysol.inf-cr.uclm.es">CrySoL</a> el otro día.<br />
<!-- coding: utf-8 --></p>
<h3>Introducción</h3>
<p>Cuando trabajas con Gstreamer, lo que utilizas son básicamente elementos (de hecho, GstElement es una clase abstracta muy alta en la jerarquía). Existen elementos para casi cualquier cosa: sink de audio pasa alsa, esd, oss; sinks de vídeo para xv, ASCII-text, Coloured-ASCII-text&#8230; para muchas cosas, pero no para todas. Puede surgir la necesidad de utilizar como fuente un dispositivo muy especial, o quizá sea necesario enviar el audio a un hardware &#8220;poco común&#8221; conectado al puerto serie.</p>
<p>Para solucionar esto, tenemos la posibilidad de crear nuestros propios elementos de Gstreamer. La API provee diferentes clases abstractas para que no sea necesario empezar desde cero. Estas clases se encargan de hacer cosas como la gestión de estados, el &#8216;prerolling&#8217;, etc., que de otra forma tendrías que currártelo tú mismo. Para más información, consulta el <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/index.html" target="_gstreamer">Plugin Writer&#8217;s Guide</a> y, especialmente, la sección <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/chapter-other-base.html#section-base-sink" target="_gstreamer">Pre-mase base class</a>.</p>
<p>Claro, el usar estas clases conlleva cierto precio (que en muchos casos está de sobra amortizado). Por ejemplo, suelen disponer sólo de un pad (para la función que quieras especificar). Las clases que te interesan son:</p>
<ul>
<li><strong>gst.BaseSink</strong> para crear un elemento de tipo &#8217;sink&#8217;</li>
<li><strong>gst.BaseSrc</strong> (y derivados) para crear un elemento de tipo &#8217;source&#8217;</li>
</ul>
<h3>Ingredientes</h3>
<p>Lo típico: Gstreamer (0.10), Python y una <a href="http://www.gnu.org/home.es.html" target="_gnu">GNU-box</a> :-p</p>
<h3>Partes comunes</h3>
<p>Si estás leyendo esto doy por hecho que sabes cómo funciona Gstreamer, así que vamos al tema directamente. Los nuevos elementos heredarán de una de las clases base, que les provee una interfaz sencilla para manipularlos. Principalmente, lo que tendrás que hacer es sobreescribir algunos métodos. Además será necesario que especifiques los PAD&#8217;s que vas a hacer disponibles. Para esto último, se utiliza una atributo de la clase, __gsttemplates__ (que en una tupla).</p>
<p>Si quieres un pad en el nuevo elemento, lo debes añadir en __gsttemplates__. Para crear un pad, existe una función que nos ayuda, gst.PadTemplate. Los parámetros que esta función acepta son:</p>
<ul>
<li><em>nombre</em>, nombre del pad en concreto</li>
<li><em>type</em>, tipo de pad (gst.PAD_SINK, gst.PAD_SRC)</li>
<li><em>presence</em>, cuándo está presente el pad (gst.PAD_ALWAYS, gst.PAD_SOMETIMES, gst.PAD_REQUEST)</li>
<li><em>caps</em>, las &#8216;capacidades&#8217; del pad, es decir, el tipo de flujo que manejará. Se debe pasar un objeto de tipo GstCaps, que podemos crearlo con gst.caps_new_any() o gst.caps_from_string(). El primer método crea un objeto con todas las &#8216;capacidades&#8217; disponibles y el segundo lo crea en función de una cadena de texto (más sobre caps en <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-caps.html" target="_gstreamer">Capabilities of a Pad</a>)</li>
</ul>
<p>También, ya que el elemento que estás creando hereda en última instancia de GOject, en el constructor tienes que llamar a __goject_init__(). Además, es bueno que establezcas el nombre del elemento.</p>
<p>Por último, algo imprescindible es registrar nuestra clase como un tipo de Gobject, con <strong>gobject.type_register(</strong><em>nombre_clase</em><strong>)</strong>.</p>
<h3>Escribiendo un sink</h3>
<p>Los elementos sink (sumidero) son aquellos que permiten recibir un flujo de datos y representan el final de una tubería. Un elemento sink es aquel que sólo tiene pads de tipo sink (en nuestro caso además, sólo tiene uno). Así pues, lo que hagamos con el flujo de datos no le importa al resto de la tubería porque somos el punto final de esta. Es nuestra labor determinar qué hacer con los datos que nos llegan, por ejemplo, mandarlos a nuestro hardware &#8220;poco común&#8221;, escribirlos en un fichero, etc.</p>
<p>Existen diferentes métodos que se pueden sobreescribir. De todos ellos, el más importante en este caso es el <em>do_render()</em>. Cuando la tubería entra en el estado PLAYING, el flujo de datos circula hacia nuestro elemento, y esto se traduce en una llamada al método <em>do_render()</em>. Por tanto, en ese método es donde debes hacer lo que necesites con los datos. Se recibe un buffer (un gst.Buffer). Cuando retorne, debe devolver un estado determinado para avisar al resto de la tubería si todo fue bien (FLOW_OK), o si los datos no eran los adecuados (FLOW_NOT_SUPPORTED), o si no quieres datos (FLOW_UNEXPECTED), o si ha habido algún error (FLOW_ERROR), etc.</p>
<p>Otro par de métodos útiles que puedes sobreescribir son los conocidos <em>get_property(key)</em> y <em>set_property(key, value)</em>, que evidentemente sirven para leer/modificar las propiedades del elemento.</p>
<p>Veamos un ejemplo sencillo:</p>
<pre>
class HelloSink(gst.BaseSink):    __gsttemplates__ = (

        gst.PadTemplate("sink",

                        gst.PAD_SINK,

                        gst.PAD_ALWAYS,

                        gst.caps_new_any()),

        )

def __init__(self, name):

        self.__gobject_init__()

        self.set_name(name)

self.count = 0

def do_render(self, buffer):

        while (self.count &lt; 10):

            print buffer.data

            self.count += 1

            return gst.FLOW_OK

return gst.FLOW_UNEXPECTED

def set_property(self, key, value):

        if key == "name":

            self.set_name(name)

        else:

            print "no existe la propiedad %s" % key

def get_property(self, key):

        if key == "name":

            return self.get_name()

        else:

            print "no existe la propiedad %s" % key

gobject.type_register(HelloSink)</pre>
<p>Este ejemplo simplemente imprime los datos que han sido recibidos. Retornamos gst.FLOW_OK si estamos listos para recibir más datos. Si no queremos más datos, podemos retornar gst.FLOW_UNEXPECTED.</p>
<h3>Escribiendo un source</h3>
<p>Los elementos source son el extremo opuesto en la tubería a los sink. Son la fuente principal (generalmente) de datos para la tubería. Son análogos en muchos aspectos a los sink. Sólo tiene pads de tipo src (en este caso, sólo uno). También es posible sobreescribir varios métodos de los cuales el más importante, en este caso, es <em>do_create()</em>. De nuevo, es la tubería quien llama a este método, con dos parámetros: <strong>offset</strong>, que representa la posición del primer byte que espera recibir y <strong>size</strong>, especificando la cantidad de bytes que necesita. Esta función debe retornar dos parámetros: uno indicando cómo ha ido todo (como en el anterior caso, gst.FLOW_OK, gst.FLOW_ERROR, etc.) y otro con los datos pedidos (dentro de un gst.Buffer).</p>
<p>Veamos otro ejemplo sencillo para un src:</p>
<pre>
class HelloSrc(gst.BaseSrc):    __gsttemplates__ = (

        gst.PadTemplate("src",

                        gst.PAD_SRC,

                        gst.PAD_ALWAYS,

                        gst.caps_new_any()),

        )

def __init__(self, name):

        self.__gobject_init__()

        self.set_name(name)

def do_create(self, offset, size):

        ret = gst.Buffer("¡Hola mundo!")

        return gst.FLOW_OK, ret

def set_property(self, key, value):

        if key == "name":

            self.set_name(name)

        else:

            print "no existe la propiedad %s" % key

def get_property(self, key):

        if key == "name":

            return self.get_name()

        else:

            print "no existe la propiedad %s" % key

gobject.type_register(HelloSrc)</pre>
<p>Este ejemplo simplemente envía la cadena &#8220;¡Hola mundo!&#8221; por la tubería.</p>
<p>Algo que me gustaría comentar es que existen clases especiales para trabajar con fuentes de datos &#8217;secuenciales&#8217; (es decir, que no se puede acceder a posiciones determinadas del flujo, como fuentes de <em>live audio</em> o cámaras). Para estos casos, quizá te sea más útil emplear gst.PushSrc</p>
<h3>Probando nuestros elementos</h3>
<p>Para testear nuestros nuevos elementos tenemos que crearlos a mano, ya que no los hemos registrado todavía en la factoría de Gstreamer. No podemos usar gst.element_factory_make() y mucho menos gst.parse_launch() (el registrar los componentes lo dejo para otro escrito <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  )</p>
<p>Así que nuestro programa de prueba quedaría más o menos de la siguiente forma:</p>
<pre>
pipe = gst.Pipeline("helloPipe")

src = HelloSrc("source")

sink = HelloSink("sink")pipe.add(src, sink)

gst.element_link_many(src, sink)

pipe.set_state(gst.STATE_PLAYING)

def bus_event(bus, message):

    t = message.type

    if t == gst.MESSAGE_EOS:

        loop.quit()

return True

pipe.get_bus().add_watch(bus_event)

loop = gobject.MainLoop()

try:

    loop.run()

except:

    pass</pre>
<p>Y la salida debería ser la esperada:</p>
<pre>
$ python hello.py

¡Hola mundo!

¡Hola mundo!

¡Hola mundo!

¡Hola mundo!

¡Hola mundo!

¡Hola mundo!

¡Hola mundo!

¡Hola mundo!

¡Hola mundo!

¡Hola mundo!</pre>
<h3>Referencias</h3>
<p><a href="http://webcvs.freedesktop.org/gstreamer/gst-python/examples/" target="_gstreamer">Ejemplos de gstreamer</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gstice.wordpress.com/11/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gstice.wordpress.com/11/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gstice.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gstice.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gstice.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gstice.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gstice.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gstice.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gstice.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gstice.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gstice.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gstice.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gstice.wordpress.com&blog=501332&post=11&subd=gstice&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gstice.wordpress.com/2007/02/22/crear-nuevos-elementos-para-gstreamer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c1171098d365a263dc03ed555d1763fe?s=96&#38;d=identicon" medium="image">
			<media:title type="html">diegomartin</media:title>
		</media:content>
	</item>
		<item>
		<title>Nuevos cambios al proyecto</title>
		<link>http://gstice.wordpress.com/2007/02/22/nuevos-cambios-al-proyecto/</link>
		<comments>http://gstice.wordpress.com/2007/02/22/nuevos-cambios-al-proyecto/#comments</comments>
		<pubDate>Thu, 22 Feb 2007 12:02:55 +0000</pubDate>
		<dc:creator>diegomartin</dc:creator>
				<category><![CDATA[Concurso Universitario de Software Libre]]></category>

		<guid isPermaLink="false">http://gstice.wordpress.com/2007/02/22/nuevos-cambios-al-proyecto/</guid>
		<description><![CDATA[En los últimos días hemos hecho una re-estructuración bastante grande del proyecto. Actualmente las especificaciones slice de ZeroC Ice para GstIce se instalan en /usr/share/gstice. Se ha añadido soporte para crear un módulo python para que nuestra librería pueda ser usada de forma transparente por el usuario y hemos re-escrito parte del código, para resolver [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gstice.wordpress.com&blog=501332&post=10&subd=gstice&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>En los últimos días hemos hecho una re-estructuración bastante grande del proyecto. Actualmente las especificaciones slice de ZeroC Ice para GstIce se instalan en /usr/share/gstice. Se ha añadido soporte para crear un módulo python para que nuestra librería pueda ser usada de forma transparente por el usuario y hemos re-escrito parte del código, para resolver algunos de los FIXME pendientes en ambos módulos (gstIceSrc y gstIceSink).</p>
<p>También hemos creado algo de documentación explicando como crear elementos Gstreamer en Python para poder añadirlos posteriormente a una tubería GStreamer, que os pondremos por aquí en el blog en breve.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gstice.wordpress.com/10/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gstice.wordpress.com/10/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gstice.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gstice.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gstice.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gstice.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gstice.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gstice.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gstice.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gstice.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gstice.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gstice.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gstice.wordpress.com&blog=501332&post=10&subd=gstice&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gstice.wordpress.com/2007/02/22/nuevos-cambios-al-proyecto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c1171098d365a263dc03ed555d1763fe?s=96&#38;d=identicon" medium="image">
			<media:title type="html">diegomartin</media:title>
		</media:content>
	</item>
		<item>
		<title>Avances en el proyecto</title>
		<link>http://gstice.wordpress.com/2007/02/16/avances-en-el-proyecto/</link>
		<comments>http://gstice.wordpress.com/2007/02/16/avances-en-el-proyecto/#comments</comments>
		<pubDate>Fri, 16 Feb 2007 18:35:05 +0000</pubDate>
		<dc:creator>diegomartin</dc:creator>
				<category><![CDATA[Diseño]]></category>
		<category><![CDATA[GStreamer]]></category>
		<category><![CDATA[ZeroC ICE]]></category>

		<guid isPermaLink="false">http://gstice.wordpress.com/2007/02/16/avances-en-el-proyecto/</guid>
		<description><![CDATA[En estas últimas 2 semanas hemos hecho muchos avances en el proyecto. Actualmente tenemos una versión totalmente funcional que seguimos refinando. Los streams se transmiten correctamente a través de la red utilizando el transporte IceStorm.
Hemos eliminado la dependencia que teníamos de los ficheros de configuración de ICE  y actualmente estamos planeando una estructuración de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gstice.wordpress.com&blog=501332&post=9&subd=gstice&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>En estas últimas 2 semanas hemos hecho muchos avances en el proyecto. Actualmente tenemos una versión totalmente funcional que seguimos refinando. Los streams se transmiten correctamente a través de la red utilizando el transporte IceStorm.</p>
<p>Hemos eliminado la dependencia que teníamos de los ficheros de configuración de ICE  y actualmente estamos planeando una estructuración de los directorios para poder importar directamente GstIce como un módulo python, de forma transparente al usuario. Estos días estamos usando el repositorio de forma bastante activa.</p>
<p>Además hemos hecho importantes cambios en la lista de cosas por hacer, quedan todavía bastantes tareas, más y menos importantes:</p>
<p><strong>Objetivos principales</strong></p>
<ul>
<li>Probar el funcionamiento con micrófono</li>
<li>Permitir múltiples envíos (consecutivos) de streams diferentes. Actualmente recibe uno solo, el resto los ignora.</li>
<li>Si hay una pausa en el flujo, se deja de recibir datos.</li>
<li>Interfaz gráfica que utilice la librería</li>
</ul>
<p><strong>Características secundarias</strong></p>
<ul>
<li>Implementar algún control de flujo para evitar enviar todos los datos directamente (contando con la información de buffers del subscriber).</li>
<li>Corregir los fixme de ambos módulos.</li>
<li>Crear documentación del proyecto.</li>
<li>La estructura de datos debe ser una cola circular. Evidentemente, se han de eliminar los datos que ya han sido leídos.</li>
<li>Utilizar algún mecanismo que evite hacer una espera activa en el do_create del src.</li>
<li>Implementar todo el trabajo como un único modulo, de forma transparente al usuario.</li>
<li>Soporte de Festival y Sphinx en caso de que no haya ancho de banda disponible</li>
</ul>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gstice.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gstice.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gstice.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gstice.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gstice.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gstice.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gstice.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gstice.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gstice.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gstice.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gstice.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gstice.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gstice.wordpress.com&blog=501332&post=9&subd=gstice&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gstice.wordpress.com/2007/02/16/avances-en-el-proyecto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c1171098d365a263dc03ed555d1763fe?s=96&#38;d=identicon" medium="image">
			<media:title type="html">diegomartin</media:title>
		</media:content>
	</item>
		<item>
		<title>Simple Ogg Player</title>
		<link>http://gstice.wordpress.com/2007/02/08/simple-ogg-player/</link>
		<comments>http://gstice.wordpress.com/2007/02/08/simple-ogg-player/#comments</comments>
		<pubDate>Thu, 08 Feb 2007 18:38:39 +0000</pubDate>
		<dc:creator>diegomartin</dc:creator>
				<category><![CDATA[GStreamer]]></category>

		<guid isPermaLink="false">http://gstice.wordpress.com/2007/02/08/simple-ogg-player/</guid>
		<description><![CDATA[Os traigo un reproductor de ficheros Ogg que hicimos hace unos meses. Utiliza Gstreamer para leer los datos de un fichero ogg. La tubería que utiliza es bastante sencilla: lee el fichero Ogg y se lo envía a la tarjeta de sonido, decodificandolo primero con oggdemux y vorbisdec.
import pygst
pygst.require("0.10")
import sys, gst, gobject
gobject.threads_init()  

def main(args):

 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gstice.wordpress.com&blog=501332&post=8&subd=gstice&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Os traigo un reproductor de ficheros Ogg que hicimos hace unos meses. Utiliza Gstreamer para leer los datos de un fichero ogg. La tubería que utiliza es bastante sencilla: lee el fichero Ogg y se lo envía a la tarjeta de sonido, decodificandolo primero con oggdemux y vorbisdec.</p>
<pre>import pygst
pygst.require("0.10")
import sys, gst, gobject
gobject.threads_init()  

def main(args):

    if len(args) != 2:
        print "Uso:", args[0], " "
        return -1

    pipestr = 'filesrc location=' + args[1] + ' ! n' + 'oggdemux ! vorbisdec ! audioconvert ! alsasink n'

    try:
        pipeline = gst.parse_launch(pipestr)
    except gobject.GError, e:
        print "No es posible crear la tubería,", str(e)
        return -1

    def eventos(bus, msg):
        t = msg.type
        if t == gst.MESSAGE_EOS:
            loop.quit()

        elif t == gst.MESSAGE_ERROR:
            e, d = msg.parse_error()
            print "ERROR:", e
            loop.quit()

        return True    

    pipeline.get_bus().add_watch(eventos)

    pipeline.set_state(gst.STATE_PLAYING)

    loop = gobject.MainLoop()
    try:
        print "Reproduciendo..."
        loop.run()
    except KeyboardInterrupt: # Por si se pulsa Ctrl+C
         pass

    print "Parando...n!Adios!"

    pipeline.set_state(gst.STATE_NULL)
    return 0

if __name__ == "__main__":
    sys.exit(main(sys.argv))</pre>
<p>Este ejemplo demuestra la potencia que tiene GStreamer + Python. En pocas líneas de código tenemos toda la funcionalidad para reproducir ficheros Ogg, y con la flexibilidad que nos ofrece Gstreamer.</p>
<p>Con gstLaunch podemos probar las tuberías que vayamos a usar sin necesidad de programar nada. GstEditor podemos utilizarlo para diseñar las tuberías, conectando unos elementos a otros a través de sus “pads” o enchufes. Estas dos utilidades gstreamer nos serán útiles en varias situaciones para “jugar” con las tuberías Gstreamer.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gstice.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gstice.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gstice.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gstice.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gstice.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gstice.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gstice.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gstice.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gstice.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gstice.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gstice.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gstice.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gstice.wordpress.com&blog=501332&post=8&subd=gstice&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gstice.wordpress.com/2007/02/08/simple-ogg-player/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c1171098d365a263dc03ed555d1763fe?s=96&#38;d=identicon" medium="image">
			<media:title type="html">diegomartin</media:title>
		</media:content>
	</item>
		<item>
		<title>Final de examenes</title>
		<link>http://gstice.wordpress.com/2007/02/06/final-de-examenes/</link>
		<comments>http://gstice.wordpress.com/2007/02/06/final-de-examenes/#comments</comments>
		<pubDate>Tue, 06 Feb 2007 10:56:23 +0000</pubDate>
		<dc:creator>diegomartin</dc:creator>
				<category><![CDATA[Concurso Universitario de Software Libre]]></category>

		<guid isPermaLink="false">http://gstice.wordpress.com/2007/02/06/final-de-examenes/</guid>
		<description><![CDATA[Por fin hemos terminado de exámenes y vamos a tener más tiempo para dedicarle al proyecto. En las próximas semanas tendréis bastantes avances en el proyecto, puesto que tenemos más tiempo.
Aunque aún no hayamos utilizado el repositorio subversion que nos da la organización, hemos ido haciendo el trabajo en un repositorio externo. Tenemos 2 elementos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gstice.wordpress.com&blog=501332&post=7&subd=gstice&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Por fin hemos terminado de exámenes y vamos a tener más tiempo para dedicarle al proyecto. En las próximas semanas tendréis bastantes avances en el proyecto, puesto que tenemos más tiempo.</p>
<p>Aunque aún no hayamos utilizado el repositorio subversion que nos da la organización, hemos ido haciendo el trabajo en un repositorio externo. Tenemos 2 elementos GStreamer, un Source y un Sink, utilizados para construir la tubería Gstreamer y enviar y recibir el flujo multimedia a través de la red.</p>
<p>Ya hemos probado IceStorm. Funciona muy bien y nos viene al pelo para el propósito de nuestra librería.</p>
<p>Volvemos con aires renovados.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gstice.wordpress.com/7/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gstice.wordpress.com/7/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gstice.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gstice.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gstice.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gstice.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gstice.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gstice.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gstice.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gstice.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gstice.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gstice.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gstice.wordpress.com&blog=501332&post=7&subd=gstice&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gstice.wordpress.com/2007/02/06/final-de-examenes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c1171098d365a263dc03ed555d1763fe?s=96&#38;d=identicon" medium="image">
			<media:title type="html">diegomartin</media:title>
		</media:content>
	</item>
		<item>
		<title>Usemos IceStorm</title>
		<link>http://gstice.wordpress.com/2006/11/13/usemos-icestorm/</link>
		<comments>http://gstice.wordpress.com/2006/11/13/usemos-icestorm/#comments</comments>
		<pubDate>Mon, 13 Nov 2006 10:03:17 +0000</pubDate>
		<dc:creator>oscarah</dc:creator>
				<category><![CDATA[Concurso Universitario de Software Libre]]></category>
		<category><![CDATA[Diseño]]></category>
		<category><![CDATA[ZeroC ICE]]></category>

		<guid isPermaLink="false">http://gstice.wordpress.com/2006/11/13/usemos-icestorm/</guid>
		<description><![CDATA[He estado mirando la documentación de ZeroC-ICE y creo que para nuestros propósitos, lo mejor es usar un servidor de distribución de eventos. ICE tiene un servicio que se llama ICEStorm que se encarga de esto.
Evidentemente tenemos dos roles: el envío del flujo de datos y la recepción. Para ello, y en términos de ICEStorm, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gstice.wordpress.com&blog=501332&post=6&subd=gstice&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>He estado mirando la documentación de ZeroC-ICE y creo que para nuestros propósitos, lo mejor es usar un servidor de distribución de eventos. ICE tiene un servicio que se llama ICEStorm que se encarga de esto.</p>
<p>Evidentemente tenemos dos roles: el envío del flujo de datos y la recepción. Para ello, y en términos de ICEStorm, tendremos que crear un &#8216;publisher&#8217; y un &#8217;subscriber&#8217;. Gracias al servicio de difusión, varios puntos de recepción se pueden añadir a una misma transmisión. Se pueden crear temas o &#8216;topics&#8217; a los cuales suscribirse para recibir el flujo de datos. E incluso, podemos asociar varios &#8216;topics&#8217; a una misma transmisión, con el objetivo de controlar el flujo de datos de forma adecuada.</p>
<p>Creo que todo esto se puede integrar fácilmente en un módulo para Gstreamer, de forma que los usuarios no tengan que preocuparse de ICE para las labores más cotidianas.</p>
<p>Bueno, ¡manos a la obra!</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gstice.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gstice.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gstice.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gstice.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gstice.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gstice.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gstice.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gstice.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gstice.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gstice.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gstice.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gstice.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gstice.wordpress.com&blog=501332&post=6&subd=gstice&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gstice.wordpress.com/2006/11/13/usemos-icestorm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3bc83976d8d691dfc1e78c7c79022697?s=96&#38;d=identicon" medium="image">
			<media:title type="html">neonux</media:title>
		</media:content>
	</item>
		<item>
		<title>1er Concurso Universitario de Software Libre</title>
		<link>http://gstice.wordpress.com/2006/11/09/1er-concurso-universitario-de-software-libre/</link>
		<comments>http://gstice.wordpress.com/2006/11/09/1er-concurso-universitario-de-software-libre/#comments</comments>
		<pubDate>Thu, 09 Nov 2006 11:40:44 +0000</pubDate>
		<dc:creator>diegomartin</dc:creator>
				<category><![CDATA[Concurso Universitario de Software Libre]]></category>

		<guid isPermaLink="false">http://gstice.wordpress.com/2006/11/09/1er-concurso-universitario-de-software-libre/</guid>
		<description><![CDATA[Arrancamos motores. El concurso está en marcha, y nuestro proyecto también.
Nuestro objetivo es crear una librería que permita el envío y la recepción de audio y/o vídeo a través de una red, utilizando GStreamer para manejar los flujos multimedia y usando ZeroC Ice como transporte.Para comprobar la validez y potencia del sistema, implementaremos una aplicación [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gstice.wordpress.com&blog=501332&post=4&subd=gstice&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://concurso-softwarelibre.us.es/" title="Concurso Universitario de Software Libre"><img src="http://concurso-softwarelibre.us.es/images/banners/concurso-vert-140.png" alt="1er Concurso Universitario de Software Libre" align="left" border="0" height="141" width="140" /></a>Arrancamos motores. El concurso está en marcha, y nuestro proyecto también.</p>
<p>Nuestro objetivo es crear una librería que permita el envío y la recepción de audio y/o vídeo a través de una red, utilizando GStreamer para manejar los flujos multimedia y usando ZeroC Ice como transporte.Para comprobar la validez y potencia del sistema, implementaremos una aplicación que use nuestra librería y que permita la transmisión de voz entre dos puntos de una red, siendo posible la multidifusión y la creación de salas de conversación.</p>
<p>Debido a la flexibilidad del sistema, también se pueden crear sistemas cerrados de TV o aulas virtuales.</p>
<p>Muchas gracias a la organización por los recursos disponibles y mucha suerte a todos los participantes</p>
<p>¡Vamos allá!</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gstice.wordpress.com/4/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gstice.wordpress.com/4/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gstice.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gstice.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gstice.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gstice.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gstice.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gstice.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gstice.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gstice.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gstice.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gstice.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gstice.wordpress.com&blog=501332&post=4&subd=gstice&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gstice.wordpress.com/2006/11/09/1er-concurso-universitario-de-software-libre/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c1171098d365a263dc03ed555d1763fe?s=96&#38;d=identicon" medium="image">
			<media:title type="html">diegomartin</media:title>
		</media:content>

		<media:content url="http://concurso-softwarelibre.us.es/images/banners/concurso-vert-140.png" medium="image">
			<media:title type="html">1er Concurso Universitario de Software Libre</media:title>
		</media:content>
	</item>
	</channel>
</rss>