Flumotion es una plataforma de streaming escrito en Python. Es una buena alternativa para hacer streaming live o VoD. La implementación se basa en dos frameworks expectaculares: gstreamer y twisted.
Entre las demás alternativas existentes para streaming, flumotion es una buena alternativa aunque la versión libre no soporta ni RTP ni broadcast streaming. Flumotion es paquete debian, pero la versión que está empaquetada no ofrece los mismos servicios que la versión 0.3.2 que se utiliza en esta receta.
Introducción
Esta plataforma se descompone en tres niveles:
High level: En este nivel hay manager's, atmosphere y flows.
Mid level: demonios de manager's y sorker's
Low level: componentes
Sólo existe una atmósfera en la que existe un manager dentro del "planeta" y luego hay flujos que contienen semillas y demás movidas.
Esto no lo entiendo ni yo, pero es la paranoia del desarrollador, así que habrá que tenerlo en cuenta.
En fin, que este tipo de diseño permite una instalación distribuida ya que el manager puede ejecutarse en un host y luego tener uno
o varios workers que se encarguen de diferentes flujos y así conseguir un sistema distribuido "acojonante". Si queréis ver mas sobre
esto leed el manual, aunque no esperéis gran cosa.
Ingredientes
Lo primero es conseguir los fuentes de la versión
0.3.2 de flumotion. También se pueden conseguir en el repo subversion:
$svn co https://core.fluendo.com/svn/flumotion/trunk flumotion
Instalación
Ahora toca compilar e instalar:
$./configure && make &&sudo make install
En /usr/local/bin/ tendremos todos los ejecutables de la plataforma. Como Flumotion utiliza conexiones SSL para poder
administrar es necesario crearse un certificado con openssl o utilizar el de prueba que esta en conf/default.pem.
Por defecto el certificado debe estar en /usr/local/etc/flumotion/. Sino hay que indicar su ubicación por línea de comandos.
$flumotion-worker -d 3 -u user -ptest> log/worker.log &
Para ver las demás opciones consultar el manual. Aunque
no esperéis gran cosa.
Ahora lanzémos la interfaz de administración. Hay dos: una con gtk y otra con ncurses. Yo utilizo la de gtk:
$flumotion-admin -v
Como se muestra en el manual la conexión con el manager se
puede hacer con o sin conexión SSL. Ya que nos ponemos, utilizamos SSL que por defecto se conecta por el puerto 7531. Si la conexión
no existe la creamos para futuros accesos. Lo primero que aparecerá en la interfaz de administración ser el wizard. Dentro de
el podremos configurar varios flujos, productores, consumidores, etc. Si le damos a todo "Siguiente" al final se crearan los jobs
necesarios para hacer nuestra primera prueba. Una vez arrancados todos los procesos es hora de probar el streaming. Por defecto podremos
acceder a el en la url http://localhost:8800/. Podremos acceder mediante un browser o con xine, mplayer, etc; en definitiva con el
reproductor multimedia que ms os guste. En este punto podremos observar la carta de ajuste de gstreamer.
La interfaz de administración en modo texto se llama: flumotion-admin-text y funciona de una forma similar a la anterior.
Configuración básica
Como alguien se habrá podido imaginar, los ficheros de configuración están en el directorio con/. Estos ficheros de configuración son
XML, lo cual facilita bastante el trabajo con la plataforma. El primer fichero a tener en cuenta es planet.xml:
Como mínimo es necesario un manager y luego se pueden utilizar tantos componentes como se necesiten. En este caso se utiliza
un "htpasswdcrypt-bouncer" para hacer la autenticación del administrador. En el worker hay que indicar el usuario/password
necesario para acceder a la interfaz de administración.
Otro fichero a tener en cuenta es el de los flujos. En principio se puede poner cualquier nombre a este fichero, pero habrá
que meterlo dentro de un directorio con el mismo nombre. Por ejemplo, dentro del directorio default/flows habrá que
añadir nuestros flujos. Por defecto, esta el fichero ogg-test-theora.xml para hacer pruebas. Su contenido es el
siguiente:
Como puede verse, solo tenemos un flujo que se llama "default". Y luego hay cuatro componentes:
video-source: que es de tipo videotest y se le asocia al worker localhost.
video-encoder: que es de tipo theora-encoder.
muxer-video: de tipo ogg-muxer. Este componente es el contenedor del stream.
http-video: de tipo http-streamer, que "saca" el stream por http ap puerto 8800.
El componente video-source es un productor, que genera la carta de ajuste de gstreamer en formato YUV con un ratio de 5
y un tamao de 320x240. El siguiente, video-encoder toma como entrada el stream de video-source y lo codifica en
formato ogg con un bitrate de 400, para posteriormente ser "mezclado" por ogg-muxer. Y finalmente. http-video hace
el streaming final sobre http.
Para probar otras configuraciones podemos utilizar el wizard. Con el wizard podemos tomar streaming a partir de webcams, cmaras
digitales, capturadores de TV, etc. Segn para lo que queramos nuestro servidor seleccionamos uno u otro. Tambin podemos elegir
audio o video, o los dos con overlay incluido; para finalmente pasarlo por http por nuestro puerto preferido. Todo esto configurable
fcilmente mediante la interfaz grfica.
Configuracin intermedia
En el apartado anterior solo hemos visto ejemplos bsicos (y lo que queda por llegar). Ahora es hora de ver todos los componentes
disponibles en la versin 0.3.2. Para ver los componentes disponibles hay que utilizar el comando:
$flumotion-inspect
El cual nos mostrar los componentes y plugs disponibles en nuestra versin. Si utilizais un versin antiga vereis como disponeis
de menos componentes, como es el caso de la versin empaquetada para debian. Para obtener ms informacin sobre un componente
concreto hacer:
$flumotion-inspect http-server
por ejemplo. Veremos las propiedades del componente http-server, que es el que voy a utilizar para el próximo ejemplo de
configuración. Este componente te permite tomar como fuente un fichero multimedia (usa ogg/vorbis por dios) y el solito se
encarga de hacer el streaming sobre la url que le especifiquemos. El fichero de flujo nuevo quedará así:
Accediendo a la URL: http://fulanito:8800 veremos nuestro video en HTTP streaming.
Configuración avanzada
Ya lo haré.
Visualizar el streaming
Anteriormente he comentado como se podría ver el video en streaming, bien mediante un browser o bien mediante nuestro reproductor
multimedia favorito. Pero cuando se pretende que el acceso a estos contenidos multimedia sean portables (todo el mundo me entiende)
es necesario buscar otro tipo de alternativas. La mejor sin duda es utilizar un browser y en esto ya han pensado los desarrolladores
de flumotion. Para ello han desarrollado cortado. Cortado es un applet que permite una
fácil visualización de los streams. Utilizarlo es muy sencillo, tan solo hay que añadirlo a nuestra web:
Si das o pretendes dar clase en la Universidad estoy seguro de que estás hasta los güevos de reescribir el curriculum en 100 formatos diferentes. En cada formato te piden cosas diferentes, organizados de forma diferente, y lo que es peor, con herramientas diferentes.
Esta receta es un “remake” de la que hizo Nacho (con su permiso) sobre el mismo tema. Sólo tiene algunos añadidos y alguna pequeña corrección.
Ingredientes
Módem ADSL Contrend CT-350 USB de Telefónica “el azulito”.
Debian GNU/Linux
Linux >= 2.6.10
subversion
unp
br2684ctl
ppp
pppoe
Módulos
Descarga los fuentes con subversion:
$svn co svn://svn.gna.org/svn/ueagleatm/trunk/ueagle-atm
A ueagle-atm/usbatm.h
A ueagle-atm/ueagle-atm.c
A ueagle-atm/COPYING
A ueagle-atm/usbatm.c
A ueagle-atm/Makefile
Revisión obtenida: 323
Puedes echar un vistazo a /var/log/syslog para comprobar que todo ha ido bien. Debe aparecer algo como:
[ueagle-atm] driver ueagle 1.3 loaded
usb 2-2: [ueagle-atm] ADSL device founded vid (0X1110) pid (0X9021) : Eagle II
usb 2-2: reset full speed USB device using uhci_hcd and address 3
usb 2-2: [ueagle-atm] using iso mode
usb 2-2: [ueagle-atm] (re)booting started
usbcore: registered new driver ueagle-atm
usb 2-2: [ueagle-atm] modem operational
usb 2-2: [ueagle-atm] ATU-R firmware version : 44e2ea17
Bridge RFC-2684
El programa br2684 es un puente para transportar diferentes protocolos sobre una conexión ATM, que es lo que suelen hacer los proveedores de ADSL. Para arrancarlo, ejetucta:
# br2684ctl -c 0 -b -a 8.32
br2684ctl[2508]: Interface "nas0" created sucessfully
br2684ctl[2508]: Communicating over ATM 0.8.32, encapsulation: LLC
br2684ctl[2508]: Interface configured
El 8.32 son el VPI y el VCI de tu ISP. Estos corresponden a Telefónica con IP dinámica. Si tienes otra cosa, tendrás que usar los adecuados.
Usuario/contraseña
Tienes que añadir el nombre de usuario y contraseña al final del fichero /etc/ppp/pap-secrets. Si tienes la ADSL de Telefónica, la línea es:
adslppp@telefonicanetpa * adslppp
Proveedor
También para Telefónica ADSL, escribe un fichero /etc/ppp/peers/adsl:
user "adslppp@telefonicanetpa"
mtu 1412 # IMPORTANTE: imprescindible si vas a compartir la conexión, en caso contrario puedes quitarlo
plugin rp-pppoe.so
nas0
noipdefault
usepeerdns
defaultroute
persist
noauth
Para levantar la interfaz
Y si todo ha ido bien, al ejecutar lo siguiente deberías tener una conexión perfectamente funcional:
# ifconfig nas0 up
# pon adsl
Y para desactivar la conexión
# poff
# killall br2684ctl
Automatizar la conexión:
Añade la siguiente sección al fichero /etc/network/interfaces:
auto ppp0
iface ppp0 inet ppp
pre-up br2684ctl -c 0 -b -a 8.32
pre-up ifconfig nas0 up
provider adsl
Hola buenas... recientemente tuve que realizar la documentación de una práctica y por la cosa de coger soltura la realice 100% en LaTex. Como tenía que hacer diagramitas chulos y tal me puse a buscar que extensión podía ayudarme y encontré una maravillosa: xymatrix. Espero que esto sea un "primeros pasos" de xymatrix ya que la potencia (como todo lo que rodea al LaTex) es increíble y el límite lo ponemos nosotros.
Ingredientes
Para trastear con la receta os hará falta:
Unos conocimientos muy mínimos de LaTex.
Tener instalado LaTeX/TeTeX.
Un buen Makefile y/o rubber.
Excepto el primer requisito... todo es paquete Debian.
Instalación de xymatrix
Instrucciones para Debian (y supongo que Ubuntu):
#apt-get install tetex-extra
Instrucciones para otras distros: ¿hay otras? :-P
El preámbulo
Bueno, sabréis que un documento en LaTex debe tener un pequeño preámbulo donde se define qué tipo de documento se está creando, paquetes que se emplearán, etc. Lo que yo uso para añadir y configurar xymatrix es:
Pero esto provocaba que no se me dibujasen las flechitas.
Crear una matriz
Pues nada, vamos a crear una matriz de 2x2 con los elementos A, B, C y D:
\[ \xymatrix{
A & B \\
C & D}
\]
Activamos el modo matemático (con "\[" y "\]"), en él insertamos un elemento xymatrix con los elementos citados. Los elementos de una columna los separamos con ampersand, es decir "&", y una nueva fila con la doble barra, "\\". Que yo lo haya puesto en distintas líneas en el código ha sido para que se vea más claro, pero podríamos haber hecho:
\[\xymatrix{A&B\\C&D}\]
Los ejemplos anteriores habrían dado como resultado:
La dimensión de una matriz se calcula por el número de columnas de la primera fila y después el número de filas creadas. Esto es importante, todas las filas tienen que tener el mismo número de columnas. Si por ejemplo nuestra matriz no va a tener elemento C debemos hacer lo siguiente:
\[\xymatrix{
A & B \\
& D}
\]
Recordad que podemos hacer cosas como:
\[\xymatrix{
A && B & C}
\]
En este caso tendríamos una matriz fila de cuatro elementos, en el que el segundo elemento es nulo. Podéis ver como quedaría aquí:
Como último ejemplo de matriz vamos a definir:
Debemos hacer una matriz de tres filas y cinco columnas. ¿Por qué cinco? pues tenemos tres elementos y dos huecos entre ellos en la fila con más columnas de todas. Quedaría como sigue:
\[\xymatrix{
& &1& & \\
&2& &3& \\
4& &5& &6}
\]
Los huecos entre ampersand's los coloco para que se vea más claro, pero podría haber escrito:
\[\xymatrix{
&&1&&\\
&2&&3&\\
4&5&6}
\]
O incluso:
\[\xymatrix{&&1&&\\&2&&3&\\4&5&6}\]
El manual de xy tiene los ejemplos en la segunda forma, por lo que más vale entender esto bien, incluso practicarlo un poco. Yo en ejemplos más complicados tuve que usar lápiz y papel para entenderme (menudo informático de pacotilla! :-P). Entendiendo esto bien podemos pasar al siguiente punto: la flechas entre elementos.
Las flechitas
Bien, las flechas tienen un origen y un destino (ohhh), el origen es el elemento donde se crea y el destino es el elemento que le indicaremos nosotros. Todas las flechas tienen dirección por lo que si queréis una bidireccional entre A y B (por ejemplo) debéis crear una entre A y B y otra entre B y A (esto creo que debería estar en el TO-DO de xy).
La forma en la que indicamos el elemento destino es indicando su desplazamiento con respecto al elemento origen. Los desplazamientos se indican con una letra: u,d,l,r; esto es: up, down, left, right (vaaaale: arriba, abajo, izquierda y derecha :-P). Por tanto, si queremos una flecha desde un elemento hasta el siguiente elemento a la izquierda, lo indicaríamos con [l]. Si queremos una flecha desde un elemento hasta el elemento dos lineas mas arriba y una columna más a la derecha pues [uur]. Al principio puede parecer lioso, pero veamos un ejemplo: en la matriz de ejemplo primera, la de 2x2, vamos a hacer un triángulo de flechas entre los elementos A, B y D con el sentido de las agujas del reloj, es decir, lo siguiente:
Pues el código es muy simple:
\[ \xymatrix{
A \ar[r] & B \ar[d]\\
C & D \ar[ul]}
\]
Veamos: con \ar añadimos una flecha, un elemento puede tener todas las que quiera, los destinos pueden ser elementos vacíos y tiene que estar obligatoriamente dentro de los límites de la matriz, en caso contrario no compilará. Si no entendéis bien el ejemplo, dibujad en un papel un cuadro de 2x2 y observad los desplazamientos. Ahora vamos a crear una matriz fila de tres elementos: A, B y C, uniremos todos de forma cíclica, es decir: A con B, B con C y C otra vez con A:
\[\xymatrix{
A \ar[r]& B \ar[r]& C \ar[ll]}
\]
Si compiláis veréis lo siguiente:
Deberíamos poder arquear la flecha para que esto no ocurra, es decir, queremos obtener lo siguiente:
Pues el código es muy simple, simplemente debemos añadir lo siguiente:
\[\xymatrix{
A \ar[r]& B \ar[r]& C \ar@/^/[ll]}
\]
Para arquear una flecha añadimos la arroba al final de ar después viene lo siguiente: "/^/" indica cómo debe ser el arco. La concavidad/convexidad es relativa a la dirección de la flecha, "/^/" lo hace de una forma y "/_/" de la otra. También podemos aumentar la curvatura: "/^1pc/", "/^2pc/", etc.
Algunos ejemplos
Hasta aquí supondré q lo entendéis todo bien e incluso lo habéis probado. Si no entendéis bien lo anterior... esto os va a resultar algo extraño...
Vamos a dibujar cuatro elementos formando un cuadrado pero con un quinto elemento central, todos los elementos exteriores tendrán una flecha hacia el elemento central:
\[\xymatrix{
A \ar[dr]& & B \ar[dl] \\
& E & \\
C \ar[ur] & & D \ar[ul]}
\]
Que resulta en lo siguiente:
Ahora vamos a dibujar un cubo, para saber cómo debemos representar un cubo mediante una xymatrix os recomiendo el uso de lápiz y papel... tal vez este ejemplo empiece a ser un poco extraño... ;-)
\[\xymatrix{
& E \ar[rr]&& F \ar[dd]\\
A \ar[rr]\ar[ur]&& B \ar[dd]\ar[ur]&\\
& G \ar[uu]&& H \ar[ll]\\
C \ar[uu]\ar[ur]&& D \ar[ll]\ar[ur]&}
\]
Con lo que obtendríamos un bonito:
Y finalmente una rayada: no voy a decir de que se trata para que a alguno le pique la curiosidad y lo pruebe :-P .Sólo diré que de la figura completa hay cuatro aristas curvadas para que no se emborrone el resultado final. Además, hay un elemento más que complica el ejemplo: todas las flechas son bidireccionales ;-), en fin, ahí tenéis:
Si entendéis este ejemplo podréis hacer cualquier otra cosa de este tipo. El manual de xymatrix es todavía mas rayante...
Enlaces de interés
Manual de xymatrix
Y como siempre que escribo una receta...
Manual de xypic
Lo de xypic no lo conocía pero parece que es bastante mejor que xymatrix... habrá que echarle un ojo ;-)