jueves, 3 de enero de 2013

Mediacenter VII: Instalando serviio como servidor DLNA

Para poder acceder a los contenidos multimedia (fotos, música, vídeos, etc) que tengo en el mediacenter, desde otros ordenadores/dispositivos de la casa, voy a instalar un servidor DLNA. Después de probar varios me decidí por serviio, tiene una versión gratuita bastante completa, no necesita interfaz gráfica y tiene muy pocos requisitos hardware para funcionar.

Al ser un programa hecho en java es necesario tener instalado en el equipo el runtime de java, para comprobarlo sólo hay que ejecutar la orden "java" desde un terminal, sino lo tenemos instalado nos va a sugerir como hacerlo, que sería con esta instrucción:
sudo apt-get install default-jre
Una vez comprobado que tengo la máquina virtual java instalada, me descargo la versión de serviio para linux y la descomprimo con el siguiente comando:
tar -xvzf serviio-1.1-linux.tar.gz
Y me genera la carpeta "serviio-1.1", ahora muevo todo el contenido de esta carpeta a la siguiente ruta del sistema /usr/share/serviio con el siguiente comando:
sudo mv serviio-1.1/* /usr/share/serviio
A continuación creo el fichero de configuración (/etc/default/serviio) del servicio con el siguiente contenido (hay que cambiar "username" por el usuario que utilicemos por defecto:
#########################################################
#- Daemon Script Configuration for Serviio Media Server
#- By Ian Laird
#- /etc/default/serviio
#########################################################
NAME="Serviio Media Server"
DAEMON="/usr/share/serviio/bin/serviio.sh"    ## Update this to point at serviio_root/bin/serviio.sh
SERVICE_ACCOUNT="username"                       ## change to an appropriate username, DON'T RUN UNDER ROOT!
 Después creo el fichero que va a arrancar el servicio (/etc/init.d/serviio) con el siguiente contenido:
#!/bin/bash
#
#########################################################
#- Daemon script for Serviio media server
#- By Ian Laird; converted for Debian by Jacob Lundbergand edited by Jopie
#- /etc/init.d/serviio
#########################################################
#
### BEGIN INIT INFO
# Provides:          serviio
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Start/stop serviio media server
# Description:       The Serviio media server makes your media available to
#                    all kinds of networked devices.
### END INIT INFO
. /lib/lsb/init-functions
if [ -f /etc/default/rcS ]; then
        . /etc/default/rcS
fi
DAEMON_STOP=" -stop"
NAME="$(basename $0)"
PIDFILE="/var/run/serviiod.pid"
TIMEOUT=10
if [ -f /etc/default/serviio ]; then
        . /etc/default/serviio
fi
[ -x "$DAEMON" ] || exit 0
running() {
        if [ "x$1" == "x" ]; then
                echo 0
                return 1
        fi
        PS=$(ps h -p $(echo $1 | sed -r 's/[\t \n]+/ -p /') | wc -l)
        echo $PS
        if [ $PS -gt 0 ]; then
                return 0
        else
                return 1
        fi
}
start() {
        log_daemon_msg "Starting Serviio media server daemon" "$NAME"
        start-stop-daemon --start -q -b -p "$PIDFILE" -m -c "${SERVICE_ACCOUNT}" -x "${DAEMON}"
        log_end_msg $?
}
stop() {
        log_daemon_msg "Stopping Serviio media server daemon" "$NAME"
        if [ -r "$PIDFILE" ]; then
                PIDS=$(pstree -p $(<"$PIDFILE") | awk -F'[\(\)]' '/^[A-Za-z0-9]/ { print $2" "$4; }')
                if running "$PIDS" > /dev/null; then
                        "${DAEMON}" "${DAEMON_STOP}"
                        for PID in $PIDS; do
                                if running $PID > /dev/null; then
                                        kill -TERM $PID
                                fi
                        done
                fi
                COUNTDOWN=$TIMEOUT
                while let COUNTDOWN--; do
                        if ! running "$PIDS" > /dev/null; then
                                break
                        fi
                        if [ $COUNTDOWN -eq 0 ]; then
                                for PID in $PIDS; do
                                        if running $PID > /dev/null; then
                                                kill -KILL $PID
                                        fi
                                done
                        else
                                echo -n .
                                sleep 1
                        fi
                done
        fi
        if running "$PIDS" > /dev/null; then
                log_end_msg 1
        else
                rm -f "$PIDFILE"
                log_end_msg $?
        fi
}
status() {
        echo -n "$NAME should be"
        if [ -r "$PIDFILE" ]; then
                echo -n " up with primary PID $(<"$PIDFILE")"
                PIDS=$(pstree -p $(<"$PIDFILE") | awk -F'[\(\)]' '/^[A-Za-z0-9]/ { print $2" "$4; }')
                RUNNING=$(running "$PIDS")
                if [[ $RUNNING && $RUNNING -gt 0 ]]; then
                        echo -n " and $RUNNING processes are running."
                else
                        echo -n " but it is not running."
                fi
        else
                echo -n " stopped."
        fi
        echo
}
case "${1:-}" in
        start)
                start
        ;;
        stop)
                stop
        ;;
        restart)
                stop
                start
        ;;
        status)
                status
        ;;
        *)
                log_success_msg "Usage: /etc/init.d/$NAME {start|stop|restart|status}"
                exit 1
        ;;
esac
exit 0
Lo hago ejecutable y lo añado al guión de entrada con los siguientes comandos:
sudo chmod 755 /etc/init.d/serviio
sudo update-rc.d serviio defaults
Un detalle importante para terminar la configuración: Para que serviio reconozca caracteres especiales y no se rompa a la hora de indexar los contenidos es necesario que editemos el fichero que arranca el programa, que en mi caso sería así:
sudo nano /usr/share/serviio/bin/serviio.sh
Y añadimos las dos líneas que aparecen en negrita a continuación, quedando el final del fichero como se indica aquí:
# Execute the JVM in the foreground
LANG=es_ES.UTF-8
export LANG

"$JAVA" -Xmx512M -Xms20M
-XX:+UseParNewGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFr$
También es necesario instalar los codecs ffmpeg si no los tenemos instalados, en caso contrario no indexará las películas. Para ello basta con ejecutar la siguiente orden:
sudo apt-get install ffmpeg
Hecho esto podemos arrancar el servidor con el comando: /etc/init.d/serviio start

Después la forma más fácil de configurar serviio es mediante la consola gráfica, para ello desde el escritorio de Lubuntu ejecuto el comando siguiente:
/usr/share/serviio/bin/serviio-console.sh
Si habeis seguido los pasos os saldrá una ventana como ésta, que se puede poner en castellano en la pestaña "Console settings", desde ella podemos añadir las carpetas con los contenidos que queremos compartir en la pestaña "Library", es cuestión de ir mirando porque todo es bastante intuitivo de configurar:

Con esto ya podemos consumir contenidos multimedia mediante cualquier cliente DLNA para windows, linux, mac, IOS o Android que tengamos en casa. Para finalizar este post tan largo, recomendar algunas aplicaciones gratuitas para Android muy interesantes relacionadas con serviio y DLNA:
  • ServiiDroid: Es como la consola de serviio pero en tu dispositivo Android.
  • ServiiGo: Para consumir contenidos multimedia del servidor serviio en el dispositivo Android.
  • Skifta: Permite consumir contenidos multimedia de un servidor DLNA en el propio dispositivo o enviar el contenido directamente a otro cliente DLNA.

No hay comentarios:

Publicar un comentario