Friday, February 02, 2007

Network Multimedia Middleware

Hola,

Este articulo lo voy a escrbir en castellano pues información en ingles hay mucha en el propio sitio de NMM. Por la tanto esta será una introducción a estas fantasticas librerias multimedia y a sus principales programas.


¿Qué es NMM?



Principalmente son unas librerias que nos sirven para hacer cosas de multimedia: reproducir videos, ver la televisión, dvd, captura de sonído, conversión de formatos, etc. Bajo esta perspectiva simplemente parecerian unas librerias más pero tienen una particularidad muy importante: la red es transparente. Con esto quiero decir que da igual donde tengamos cada componente que forma parte de la tarea multimedia pues estas librerias se encargan de manajar la red y hacerla invisble de cara al usuario.

De lo más facil a lo complicado


La instalación


Por desgracia actualmente, o al menos eso creo, no existen rpm ni deb para las distribuciones actuales. Pero no todo está perdido, los desarrolladores (no he hablado de ellos más, adelante lo haré) han habilitado varios medios para poder instalar NMM.

Desde precompilado en tar.gz


Esta es la opción más sencilla. Primero tenemos que descargar la versión 0.7, hay dos ficheros:
  • Compilada con gcc version 2.95: aquí
  • Compilada con gcc version 3.X: aquí

Tambien podemos encontrar las nightly builds de Sourceforge aquí pero como siempre estas son version de test aunque suelen funcionar.
Ya tenemos el fichero acontinuación lo descomprimimos:

elessar@minastirith$ cd /home/elessar
elessar@minastirith:/home/elessar/$ tar zxvf nmm-0.7.0-binaries-gcc3-i686.tar.gz

Ahora definimos la variable de entorno que utilizará NMM para saber donde está instalado y indicamos el directorio de las librerias para el linker:

elessar@minastirith:/home/elessar$ export NMM_DEV_DIR=/home/elessar/nmm-0.7.0
elessar@minastirith:/home/elessar$
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/elessar/nmm-0.7.0/lib

Ahora tenemos que ejecutar el programa serverregistry para generar el fichero con los recursos multimedia que están disponibles en nuestro ordenador:

elessar@minastirith:/home/elessar$ cd nmm-0.7.0/bin
elessar@minastirith:/home/elessar/nmm-0.7.0/bin$ ./serverregistry -s

Y esperamos a que termine su ejecución. Ahora realizaremos una simple prueba para comprobar si funciona correctamente:

elessar@minastirith:/home/elessar/nmm-0.7.0/bin$ ./helloworld1 fichero.mp3

El programa helloworld1 es un programa de demostración y aprendizaje muy simple y cuyo código fuente puede encontrarse en las fuentes de NMM. Si todo va bien deberiamos escuchar el fichero.mp3. Y con esto ya podemos pasar a hacer cosas mucho más interesantes.

Desde el código fuente


El fichero es la versión 0.7 y puede encontrase aquí. En este caso tras la liberación del fichero sacaron un patch para poder usar las FFMpeg. La información sobre como aplicar el patch puede encontrarse aquí.

elessar@minastirith$ cd /home/elessar
elessar@minastirith:/home/elessar/$ tar zxvf nmm-0.7.0.tar.gz

Aunque podemos compilar NMM contra las librerias (recuerdo que hacer falta los paguetes -devel) que tengamos instaladas yo recomiendo no hacerlo pues NMM es bastante follonero con los numeros de versión y al final resulta mucho más facil y cómodo descargarse los dos siguientes ficheros:
nmm-0.7.0-external-libs.tar.gz
nmm-0.7.0-external-includes.tar.gz
Los descomprimimos:

elessar@minastirith:/home/elessar/$ tar zxvf nmm-0.7.0-external-libs.tar.gz
elessar@minastirith:/home/elessar/$ tar zxvf nmm-0.7.0-external-includes.tar.gz

Y si tenemos la versión del gcc 3.X:

elessar@minastirith:/home/elessar/$ cd nmm-0.7.0-external-libs
elessar@minastirith:/home/elessar/nmm-0.7.0-external-libs$ ./make_gcc3_libs

O si tenemos la version 2.95:

elessar@minastirith:/home/elessar/$ cd nmm-0.7.0-external-libs
elessar@minastirith:/home/elessar/nmm-0.7.0-external-libs$ make

Bien a continuación definimos las variables de entorno:

elessar@minastirith:/home/elessar/$ cd /home/elessar/nmm-0.7.0
elessar@minastirith:/home/elessar/nmm-0.7.0$ export NMM_DEV_DIR=/home/elessar/nmm-0.7.0
elessar@minastirith:/home/elessar/nmm-0.7.0$
export LD_LIBRARY_PATH=/home/elessar/nmm-0.7.0-external-libs:$LD_LIBRARY_PATH

Acontinuación pasamos a configurar y compilar:

elessar@minastirith:/home/elessar/nmm-0.7.0$
./configure --with-extra-libs=/home/elessar/nmm-0.7.0-external-libs --with-extra-includes=/home/elessar/nmm-0.7.0-external-includes
elessar@minastirith:/home/elessar/nmm-0.7.0$ make

Tras esto nos queda esperar pues tardará un rato en compilarlo todo. Una vez finalizada la compilación podemos realizar el mismo test de antes para comprobar que funciona correctamente.

Lo interesante: quiero multimedia distribuida


Vamos a dejarnos de vueltas y vamos a lo importante pues ya lo tenemos instalado. Hay 2 programas principales:

serverregistry


Este programa es el que se encarga de gestionar los recursos y realizar las conexiones oportunas entre las diferentes máquinas. Por ello tendremos que tener ejecutando en una consola diferente a la que usamos para ejecutar clic.

clic


Este programa es el que podriamos llamar el "reproductor". Tiene 2 maneras diferentes de funcionar:

  • Usando ficheros .gd: Asi tendremos toda la potencia de NMM

  • Usando Graph Builder: Para cosas más sencillas o típicas


Ficheros .gd


Tienen una sintaxis bastante sencilla que veremos a base de ejemplos.
Reproducir un fichero .mp3: mp3.gd

% This graph description realizes a simple MP3 player.
% Use the -i option of clic to specify the MP3 file

MP3ReadNode ! MPEGAudioDecodeNode ! PlaybackNode

Y para ejecutarlo:

elessar@minastirith:/home/elessar/nmm-0.7.0/bin/$
./clic mp3.gd -i /home/elessar/audio/song.mp3

Vosotros direis: Esto esta muy bien pero para hacer esto uso el amarok que está más chulo. Y teneis razón así que vamos a complicarlo un poquito. Supongamos que tenemos los ordenadores minastirith y minasmorgul (ambos deben estar nombrados en el fichero /etc/hosts o ser resolubles por dns ya que de momento las IP no están soportadas) y en ambos tengo instalado NMM y serverregistry se está ejecutando. Yo tengo el fichero en minastirith pero lo quiero escuchar en minasmorgul. Pues creamos el siguiente fichero: mp3remote.gd

% This graph description describes a simple MP3 player where the MPEGAudioDecodeNode
% is running on host "minasmorgul". The serverregistry on host "minasmorgul"
% is listening on port 22801.
% Use the -i option of clic to specify the MP3 file

MP3ReadNode !
MPEGAudioDecodeNode # setLocation("minasmorgul") !
PlaybackNode # setLocation("minasmorgul")

Y lo ejecutamos en minastirith con:

elessar@minastirith:/home/elessar/nmm-0.7.0/bin/$
./clic mp3remote.gd -i /home/elessar/audio/song.mp3

Y deberiamos escuchar el fichero en minasmorgul. Esto ahora si que está mucho más interesante.
Pero esto es un ejemplo muy sencillo podemos hacer mucho más. Supongamos que tenemos una lectora de dvd en minastirith y que minasmorgul no tiene. Pues podemos usar NMM para ver nuestros videos más facilmente pero esto lo explicaré usando Graph Builder.

Graph Builder


Aunque el ejemplo puesto en el apartado anterior era un simple reproductor de mp3 solo hay coger la documentación disponible para extender las capacidades mucho más allá. Pero para cosas más cotidianas la gente de NMM han habilitado un método más sencillo: los Graph Builder.
Reproductor DVD: Como hemos dicho anteriormente queremos ver el DVD en minasmorgul pero este no dispone de unidad lectora. Pues es así de sencillo:

elessar@minasmorgul:/home/reybrujo/nmm-0.7.0/bin/$
./clic -u dvd://minastirith/dev/dvd?title=1&chapter=4&angle=1"

Así de simple. La sintaxis completa de este comando es:

dvd://<hostname>/<path to dvd device>?title=<number>&
chapter=<number>&angle=<number>

Hay otros Graph Builder disponibles como pueden ser:

file://<hostname>/<path and filename>
audiocd://<path to audio cdrom device>?track=<track number>
tv://<hostname>/<path to video device>
dvbtv://<hostname>/<path to video device>
ivtv://<hostname>/<path to video device>
mpegtv://<hostname>/<path to video device>

Podeis encontrar más información aquí.

Terminando


Para terminar esta introducción diré varias cosas que puede en entradas posteriores amplie. Este programa lo está desarrollando principalmente un grupo de personas de la universidad alemana Computer Graphics Lab - University of Saarbrücken. Son gente maja y estan haciendo un gran software. Yo por mi parte he realizado un plugin para captura de video usando V4L2 y que puede encontrarse en el CVS en la sección contrib (esto es para subirme un poco el ego ;-) ).

Tienen tambien desarrollado un plugin para poder usar NMM con Amarok.

La sección de documentación es bastante buena y en ella podemos encontrar un listado con los plugins que tiene y una breve descripción de para que sirven.

Bueno quizas me dejo algo en el tintero pero ya hablaremos más de NMM más tarde.

Un saludo.

No comments: