Instalar Servidor DLNA ====================== .. image:: _images/dlna.png :align: right :width: 250px .. contents:: Tabla de contenidos Introducción ------------ Un servidor DLNA (Digital Living Network Alliance) es el encargado de proporcionar contenido digital a los distintos dispositivos de consumo compatibles conectados a una red local. En otras palabras, todo servidor DLNA tendrá audios, vídeos y fotos almacenados en un dispositivo de almacenamiento. El contenido almacenado podrá ser reproducido en cualquier televisor o dispositivo móvil que esté conectado a la misma red local que el servidor DLNA. Utilidades ---------- #. Hacer que nuestro televisor, consola, tablet o smartphone puedan reproducir vídeos, música o imágenes almacenados en el servidor DLNA. #. Que nuestros altavoces DLNA reproduzcan música o archivos de audio almacenados en el servidor DLNA. #. Imprimir fotos o documentos desde nuestro teléfono móvil. Para ello tanto el teléfono como la impresora tendrán que ser compatibles con la tecnología DLNA. #. Que nuestro televisor reproduzca vídeos, audios o imágenes almacenados en nuestro smartphone. #. Etc. Para llevar a término las utilidades mencionadas necesitáis que vuestros televisores, consolas, altavoces, impresoras, discos duros de red y dispositivos móviles sean compatibles con DLNA. .. Note:: Todos los televisores y aparatos electrónicos actuales son compatibles con la tecnología DLNA. Tipos de Servidores DLNA que podemos instalar en Raspberry Pi ------------------------------------------------------------- ReadyMedia (MiniDLNA), Plex, Mediatomb, Rygel, Kodi, Serviio, etc. De entre todos las opciones citadas he decido usar **ReadyMedia**, antiguamente conocido como *MiniDLNA*. Quizás no es la opción más popular pero la he elegido por los siguientes motivos: - **Es un servidor muy ligero**. Hay que tener en mente que el objetivo es instalarlo en una Raspberry Pi y que esté activado las 24 horas del día. Es importante que sea ligero porque una Raspberry Pi no es potente y aparte de servidor DLNA en mi caso también la uso bloquear la publicidad, servidor VPN, nube personal, para descargar Torrents, etc. - **Es una solución simple** que lo único que hace es servir contenido a mi televisión y dispositivos móviles. Hay que tener en cuenta que una Raspberry Pi no tiene potencia para transcodificar audio y vídeo. Además los clientes DLNA actuales aceptan prácticamente la totalidad de formatos de audio y video. - **Su instalación y configuración es extremadamente sencilla**. Es una opción efectiva y fácil de usar. - **Funciona a la perfección**. No se puede decir lo mismo de otras opciones como Rygel que a priori son mejores. Rygel es un servidor DLNA desarrollado por Gnome, tiene un desarrollo activo y cumple con las características que estoy buscando. No obstante, después de instalarlo he observado que tiene fugas de memoria importantes. Si quereis conocer algo más sobre los DLNA, les dejo un enlace en el que podrán ver y comparar las funcionalidades que ofrecen los servidores DLNA más conocidos. https://en.wikipedia.org/wiki/Comparison_of_UPnP_AV_media_servers Instalación ----------- .. Note:: El tutorial que verán a continuación se puede aplicar en una Raspberry Pi y en sistemas operativos GNU-Linux .. code:: console sudo apt-get install minidlna Una vez instalado aseguraremos que esté levantado ejecutando el siguiente comando en la terminal: .. code:: console sudo service minidlna start Finalmente ejecutaremos el siguiente comando para asegurar que el servidor DLNA se iniciará de forma automática cada vez que reiniciemos nuestro ordenador o Raspberry Pi: .. code:: console sudo update-rc.d minidlna defaults Configuración ------------- Para iniciar el proceso de configuración de ReadyMedia ejecutamos el siguiente comando en la terminal: .. code:: console sudo nano /etc/minidlna.conf Cuando se abra el editor de texto tenéis que aplicar la siguiente configuración: - ``media_dir=V,/media/downloads/videos`` Definimos la ubicación en que almacenamos los archivos de vídeo. Podemos definir tantas ubicaciones como queramos. En mi caso elijo la ubicación ``/media/downloads/videos`` - ``media_dir=A,/media/downloads/musica`` Fijamos la ubicación de los archivos de audio. Podemos definir tantas ubicaciones como queramos. La ubicación elegida en mi caso es ``/media/downloads/musica`` - ``media_dir=P,/media/downloads/fotos`` Especificamos la ubicación de los archivos de imagen. Podemos definir tantas ubicaciones como queramos. La ubicación elegida en mi caso es ``/media/downloads/fotos`` - ``db_dir=/var/cache/minidlna`` Directorio en que se ubica la base de datos files.db que almacena datos del servidor DLNA. - ``log_dir=/var/log`` Si queréis almacenar logs de lo que pasa en el servidor tienen que descomentar esta línea. Los logs los podréis encontrar en la ubicación ``/var/log/minidlna.log`` - ``port=8200`` Puerto en el que estará escuchando el servidor web para que podamos consultar el número de archivos del servidor y los clientes que se han conectado al servidor. - ``friendly_name=Pi`` Definimos el nombre con que los clientes DLNA detectarán nuestro servidor DLNA. Podéis poner el nombre que queráis. En mi caso he puesto Pi. - ``serial=681019810597113`` Es el número de serie que el servidor proporciona a los clientes. No toquéis este valor. Dejad el número de serie por defecto. - ``inotify=yes`` Selecciono la opción ``yes``. De este modo, cuando se borre o copie contenido del servidor se actualizará la información de la base de datos ubicada en ``/var/cache/minidlna/files.db`` - ``album_art_names=Cover.jpg/cover.jpg`` Definimos los nombres que deben tener las caratulas de un audio o vídeo. Si queremos definir una caratula para una película podemos hacerlo guardando una imagen con el nombre ``cover.jpg`` o ``Cover.jpg`` en la carpeta que contiene la película. El tamaño recomendado es de 160×160 pixeles. ReadyMedia también es capaz de extraer caratulas contenidas en el contenedor del vídeo. - ``notify_interval=60`` Seleccionamos la frecuencia con que nuestro servidor DLNA se anuncia a la red. En mi caso selecciono 60 segundos. De este modo estoy seguro que en menos de un minuto cualquier dispositivo será capaz de detectar y conectar con mi servidor DLNA. Una vez finalizada la configuración guarden los cambios y cierren el fichero. Finalmente tan solo tenemos que reiniciar el servidor ejecutando el siguiente comando: .. code:: console sudo service minidlna restart Cambiar los límites de iNotify ------------------------------ ReadyMedia usa la propiedad del Kernel inotify para detectar las modificaciones en cada una de las carpetas que almacena contenido. Al detectarse una modificación se actualiza el contenido de la base de datos ``/var/cache/minidlna/files.db``. Para que inotify pueda monitorizar las modificaciones tendremos que cambiar sus límites. Para fijar un nuevo límite ejecutaremos el siguiente comando: .. code:: console su Acto seguido introduciremos la contraseña del usuario root. Una vez estemos logueados como usuario root ejecutamos el siguiente comando en la terminal: .. code:: console echo 65538 > /proc/sys/fs/inotify/max_user_watches Acto seguido reiniciaremos el servidor ejecutando el siguiente comando: .. code:: console service minidlna restart Finalmente nos desloguearemos del usuario root ejecutando el siguiente comando: .. code:: console exit Si alguna vez precisan reconstruir la base de datos tan solo tienen que ejecutar el siguiente comando en la terminal: .. code:: console sudo service minidlna force-reload Configurar el firewall de la Raspberry Pi o GNU-Linux ----------------------------------------------------- En el caso que tengan activado un firewall deberán abrir los puertos 8200 TCP y 1900 UDP. Para ello ejecutad el siguiente comando en la terminal: .. code:: console sudo nano /etc/rc.local Cuando se abra el editor de textos pegaís las siguientes reglas: .. code-block:: console iptables -A INPUT -i wlan0 -p tcp -s 192.168.1.0/24 -d 192.168.1.20 -j ACCEPT iptables -A INPUT -i wlan0 -p udp -s 192.168.1.0/24 -d 192.168.1.20 -j ACCEPT Donde: **wlan0**: Tendrá que ser reemplazado por la interfaz de red que usa su Raspberry Pi. **192.168.1.0/24**: Tenemos que usar los valores que definen nuestra red. **192.168.1.20**: Tendremos que remplazar este valor por la IP interna que usa nuestra Raspberry Pi. Una vez introducidas las reglas guardamos los cambios, cerramos el editor de textos y reiniciamos el servidor. De esta forma, cualquier dispositivo conectado a nuestra red local tendrá acceso a cualquier servicio que esté corriendo en la Raspberry Pi. Reproducir el contenido de nuestro servidor DLNA ------------------------------------------------- Una vez instalado y configurado el servidor detallaré como podemos empezar a sacarle partido. En Android y en iOS existen multitud de clientes DLNA para reproducir películas, sonido e imágines. Algunos de ellos son **BubbleUPnP, VLC, AVPlayerHD, Kodi, LocalCast, etc**. Reproducir el contenido del servidor DLNA en nuestro ordenador ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Al igual que en Android e iOS tenemos multitud de opciones para reproducir los vídeos, sonidos y fotografías de nuestro servidor DLNA. Algunas de ellas son **Kodi, VLC, Plex, Foobar2000**, etc. Reproducir contenido del servidor en nuestro televisor ++++++++++++++++++++++++++++++++++++++++++++++++++++++ Es extremadamente sencillo reproducir contenido del servidor DLNA en nuestro televisor. Para ello abrimos nuestro televisor. Una vez abierto presionamos el botón ``Source`` de nuestro mando a distancia. Esperamos unos segundos y debería detectarse nuestro servidor DLNA. Acto seguido accedemos dentro de nuestro servidor DLNA con la ayuda del mando a distancia: Una vez dentro del servidor podremos navegar para encontrar el audio vídeo e imagen que queramos reproducir. Una vez encontrado tan solo tenemos seleccionarlo y presionar en el botón OK o reproducir. Acceder a la Interfaz Web del servidor DLNA ------------------------------------------- Abrimos el navegador web y accedemos a una dirección del siguiente tipo: http://ip_raspberry_pi:puerto_escucha_readymedia Por lo tanto en mi caso accederé a la siguiente URL: http://192.168.1.20:8200 .. Note:: El archivo de configuración de ReadyMedia permite definir una URL personalizada. También permite cambiar el puerto. La información que proporcionará la interfaz web será la siguiente: .. image:: _images/dlna-web.jpg :align: center :width: 100% Si observan la captura de pantalla verán que la información es escasa. Tan solo podremos ver: - El número de archivos de audio, vídeo e imagen que tenemos indexados en la base datos. - El detalle de los clientes que están conectados al servidor. La única utilidad que veo a la interfaz web es ver si la base de datos está indexando correctamente el contenido que añadimos o borramos al servidor DLNA.