sábado, 3 de mayo de 2014

(Actualizado 2014/06/04) MediaTomb, servidor de contenidos UPnP para GNU Linux y Mac OS X

Tienes un montón de cine y música y quieres que esté disponible en red para todos tus dispositivos conectados. UPnP viene al rescate. UPnP es un protocolo que permite a los dispositivos conectados a una red anunciar sus servicios, y a otros dispositivos buscarlos lanzando mensajes de búsqueda. Con un servidor UPnP como MediaTomb y dispositivos que puedan buscar contenidos mediante UPnP como por ejemplo dispositivos Android con la aplicación BubbleUPnP instalada, obtienes una combinación perfecta para tener tus contenidos disponibles donde quieras que estés dentro de tu red. Esto se podría combinar con una conexión FTTH con alta capacidad de subida para acceder a tus contenidos a través de una VPN, por ejemplo. Con esta entrada de blog cubriré brevemente lo mínimo necesario para instalar y configurar el servidor UPnP MediaTomb bajo Ubuntu o derivados.

Para instalarlo basta con ejecutar el comando sudo apt-get install mediatomb en un terminal o bien instalarlo desde el centro de software.
Seguidamente hay que indicarle los directorios donde debe buscar los contenidos así como la interfaz de red desde la que debe anunciarse MediaTomb. Para mayor seguridad de nuestro sistema evitaremos activar la interfaz web de la que opcionalmente MediaTomb dispone.

Para indicar todos esos parámetros debemos editar el archivo /etc/mediatomb/config.xml. Para ello podemos usar nuestro editor preferido, invocándolo siempre con permisos de super usuario (en un terminal con sudo nombreeditor o bien mediante interfaz gráfica ALT+F2 -> gksu nombreeditor -probado con KDE y GNOME/Unity). En el mismo archivo se puede activar la interfaz web (ui enabled=yes en vez de =no) con usuario mediatomb y contraseña mediatomb por defecto. Esto es un peligro debido a que la interfaz web permite explorar todo el sistema de archivos y aún cambiando le usuario y contraseña no es recomendable tenerla activada por posibles riesgos de seguridad.

El archivo config.xml al estar descrito con etiquetas XML es bastante sencillo de seguir y muy autodescriptivo. Y en caso de duda siempre podemos ir a la documentación de MediaTomb que explica las etiquetas admitidas y sus posibles opciones.

Si tu ordenador tiene más de una tarjeta de red y ambas las tienes activas con una IP asignada, es recomendable añadir la etiqueta interface: < interface > nombreinterfaz < /interface >. La etiqueta interface hay que ponerla dentro de la etiqueta server (después de < server > y antes de < /server >). Siento el espaciado pero se que la cagarruta de Blogger interpreta cualquier cosa escrita como HTML así que esas etiquetas si las pusiera sin espacios desaparecerían para pasar a código HTML que no sirve.

Para indicarle los directorios donde están nuestros archivos de medios, hay que añadir una etiqueta directory por cada carpeta (directorio) que queramos añadir. Podemos indicarle también el modo en el que MediaTomb actualiza los contenidos, con inotify (el núcleo Linux informa de cambios en los nodos-i de los archivos) o bien que cada X segundos MediaTomb explore de nuevo la carpeta. Un ejemplo de configuración de directorios sería el siguiente:
< autoscan use-notify="yes" >
      < directory location="/home/filiprino/Vídeos" mode="inotify" recursive="yes" >< /directory >
      < directory location="/home/filiprino/Música" mode="inotify" recursive="yes" >< /directory >
      < directory location="/mnt/datoskhome/filiprino/videos" mode="inotify" recursive="yes" >< /directory >
      < directory location="/mnt/datoskhome/filiprino/musica" mode="inotify" recursive="yes" >< /directory >
      < directory location="/media/touro4tb/videos" mode="inotify" recursive="yes" >< /directory >
      < directory location="/media/touro4tb/musica" mode="inotify" recursive="yes" >< /directory >
< /autoscan >


Hay que asegurarse de que los directorios tienen los permisos adecuados para ser leídos por MediaTomb ya que por defecto MediaTomb se ejecuta bajo el usuario mediatomb y grupo mediatomb. En mi caso lo que he hecho ha sido cambiar el grupo de los directorios de filiprino a mediatomb y añadir el usuario filiprino al grupo mediatomb. De esa forma mediatomb ya puede explorar los directorios y archivarlos. Nótese la opción recursive, la cual permite realizar una exploración recursiva (seguir el árbol de directorios). Para las carpetas en /home no hace falta el cambio de permisos dado que por defecto son legibles para otros usuarios distintos del usuario propietario y los miembros del grupo de los archivos. Sin embargo de no ser así pues habría que añadir el usuario mediatomb al grupo de tu usuario en /home.
Si nuestro sistema no dispone del mecanismo inotify, siempre podemos usar el modo timed junto con la opción interval (interval="tiempo en segundos"). El modo timed también es útil si pretendes poner como carpetas a compartir directorios que montes y desmontes del sistema, como por ejemplo discos duros USB, así que tener esas carpetas como timed no es mala idea. Cuando no estén presentes dará error de que no puede acceder a ellas y cuando lo estén las añadirá de nuevo a la colección y ya está. El único pero de esto es que las modificaciones (adición o eliminación de archivos) no estarán disponibles inmediatamente, así pues procura poner un intervalo de pocos segundos. El modo timed requiere de un parámetro opcional, level para indicar qué hacer en el momento de buscar cambios: comprobar todos los archivos de nuevo o sólo buscar los que han sido modificados desde la última vez. Esto es útil para cambios en los metadatos (información de título, año, sinopsis, autor, grupo, ...).

Las etiquetas directory hay que ponerlas dentro de import hidden-files (después de < import hidden-files="no" > y antes de < /import >).

Es importante añadir también las etiquetas que establecen el sistema de codificación de caracteres para que nombres de archivos con símbolos extraños (acentos, la eñe) aparezcan correctamente. Lo normal es usar la codificación UTF-8 así pues usaremos las etiquetas filesystem-charset y metadata-charset para establecer el conjunto de caracteres UTF-8 como se muestra en la figura siguiente:



Una vez realizados todos los cambios (especificar interfaz de red en la que MediaTomb estará presente, directorios en los que buscar contenidos y asegurar que los permisos están correctamente puestos) ya está todo hecho. Basta con reiniciar MediaTomb (sudo service mediatomb restart) para que lea de nuevo el archivo de configuración. Cualquier error aparecerá en /var/log/mediatomb.log. No hay que preocuparse de los errores en referencia a iconv. Sí hay que preocuparse de los de permiso denegado o cualquier error en referencia al archivo de configuración, indicando la línea donde ha encontrado el error.
Para los usuarios de PS3 y otros dispositivos hay algunas opciones en el config.xml que están comentadas (desactivadas) y que son necesarias para tener compatibilidad con estos dispositivos. Tengo que añadir el hecho de que estos dispositivos suelen necesitar recodificar al vuelo o cambiar el formato contenedor para la música o vídeo, por ejemplo de MKV a MP4. Diría que hay algunas opciones ya establecidas al respecto (mapear de un formato a otro) pero no es algo que haya comprobado así que en caso de problemas es buena idea echarle un vistazo a la documentación de MediaTomb. No debería presentar mayores problemas dado que MediaTomb entre otras lindezas permite servir vídeos de YouTube en FLV o MP4 o incluir los subtítulos .srt que suelen acompañar los AVI duales en un flujo MPEG2.

BubbleUPnP en Samsung Galaxy Note 10.1 2014

Con el servidor MediaTomb configurado y todos los directorios explorados ya podemos sacar nuestro dispositivo con su cliente UPnP (como BubbleUPnP en Android) y ver nuestros archivos de nuestro ordenador a través de la red.
BubbleUPnP en concreto al pulsar sobre alguno de los archivos nos preguntará qué aplicación usar para reproducir, de forma que BubbleUPnP le pasará los contenidos a dicha aplicación. Actualmente uso MX Player.

MediaTomb arrancará cada vez que encendamos el ordenador. Es un demonio más de nuestro sistema GNU Linux, actuando como servidor de archivos. Sin duda alguna una aplicación a tener en cuenta para nuestra nube privada.

Espero que la entrada de hoy haya sido de utilidad. A los usuarios de Ubuntu 14.04 seguramente sí, ya que MiniDLNA ha sido retirado de los repositorios de Ubuntu. MediaTomb es una alternativa mucho más potente y completa.

1 comentario:

  1. Ah... y MediaTomb es código GPL a diferencia de MiniDLNA que es BSD.

    ResponderEliminar