miércoles, 22 de mayo de 2013

XBMC en la Raspberry Pi al 99% en 60' y 2 cafés (guía de instalación)

La Raspberry Pi es una artilugio sorprendente. Un ordenador del tamaño de un paquete de cigarrillos que cuesta 25 dolares en su versión más básica, corre Debian y otras variantes de Linux e incorpora una GPU capaz de generar gráficos en 3D y decodificar vídeo con calidad bluray.


Este dispositivo está suponiendo una auténtica fuente de inspiración para una legión de manitas digitales que andan entusiasmados construyendo toda clase de locos tinglados aprovechando que el sistema se puede conectar con una gran variedad de dispositivos electromecánicos utilizando su puerto GPIO interno. Ni que decir tiene que su filosofía, totalmente abierta, y su sencillez lo están haciendo extremadamente popular en ambientes educativos.

Como resultado de unas cuantas horas jugueteando con la Raspberry Pi he pensado, sin embargo, que estaría bien resumir mi experiencia configurando este dispositivo como reproductor multimedia con XBMC. Hay docenas de tutoriales en Internet que hablan de esto, pero ninguno, de entre los que yo he encontrado al menos, detalla las instrucciones necesarias para conseguir que nuestra pequeña Raspberry Pi (RPi en adelante) pueda reproducir archivos de vídeo extremadamente pesados con tasa de bits de entre 30 y 40 Mbps.

Vamos a ello.


1. Definiendo objetivos.

¿Qué se puede hacer con una RPi + XBMC?
  • Reproducir audio en multitud de formatos, incluyendo ALAC y FLAC, incluso en multicanal, y hasta 192 / 24.
  • Reproducir archivos de vídeo en multitud de contenedores, entre ellos vob, mkv, m2ts, iso y estructuras de carpetas, almacenados en discos usb locales o servidores remotos cifs, nfs o UPnP.
  • Compartir en red, empleando una variedad de protocolos, los archivos almacenados en una unidad USB local conectada a la RPi. Puesto que el objetivo de esta guía es la de conseguir un reproductor con las mejores prestaciones posibles y la Raspberry va justita de CPU, no voy a tocar este aspecto. Además recordemos que la conexión de red es de 100 Mbps.
  • Descodificar vídeo en mpeg2, VC-1, y h.264 de alto bitrate (40Mbps). Se puede por tanto reproducir vídeo con calidad bluray. Las licencias de descodificación por hardware de mpeg2 y VC-1 son de pago (unos 4€ ambas). Se soporta la navegación por menús en los DVD (con algún fallo) pero no en los bluray.
  • Controlar el reproductor a ciegas desde un móvil o tablet utilizando excelentes aplicaciones como Constellation o Yatse.
  • Enviar audio desde un dispositivo Apple utilizando Airplay.
¿Qué no se puede hacer con una RPi + XBMC?
  • Reproducir DVD-A o SACD.
  • Reproducir discos físicos DVD (matizable) o bluray comerciales (con encriptación CSS o AACS).
  • Reproducir audio DTS-MA o Dolby TrueHD. En el primer caso se escucha el core DTS, en el segundo ruído y el vídeo se reproduce a trompicones.
  • Descodificar audio en AC3 o DTS en software para emitirlo a través de la salida analógica (es mala de co...). Falta potencia. El escenario de uso más favorable pasa por conectar la RPi a un receptor multicanal por HDMI para que este último realice la descodificación.
  • Utilizar un DAC USB como dispositivo de salida (están en ello, algo hay pero la cosa no acaba de andar bien).
  • Reproducir audio sin pausas entre pistas (gapless playback).
Resumiendo: con los 50 euretes que cuesta una RPi incluyendo gastos de envío, fuente de alimentación, cables, carcasa, etc. tenemos por tanto un reproductor de medios muy competente pero con algunas carencias importantes. En cualquier caso os animo a encontrar por ese precio un reproductor que haga todo lo que hace éste y algunas o varias de las cosas que no hace.


2. Lo que necesitamos.

Tres cosas, además lógicamente de una RPi:
  • Una distribución adaptada de XBMC. En estos momentos hay 3: Openelec, XBian y Raspbmc. Las 2 últimas son específicas para RPi y, tras probar ambas, tengo que decir que me gusta más Raspbmc. Va por delante de XBian por cuanto se actualiza frecuentemente para reflejar la evolución del desarrollo principal de XBMC, que es multiplataforma.
  • Una tarjeta SD o, alternativamente, una SD + un pendrive o disco USB. En este último caso la RPi arranca desde la SD pero carga y ejecuta XBMC desde el disco USB. La opción SD + USB se supone que mejora el rendimiento del sistema, aunque lógicamente en la medida en que el disco USB que usemos sea más rápido que la SD. He probado ambas posibilidades sin notar diferencias significativas entre una SD y un pendrive USB, ambos de 2GB y corrientuchos. Por simplicidad me he decantado por la primera opción. Con una de este tamaño vamos más que sobrados, quedando una vez hayamos completado el proceso más de 1GB libre en la SD.
  • Un ordenador con Windows, OS X o Linux y dotado de lector de tarjetas para preparar la tarjeta SD.

3. Preparación de la tarjeta SD.

3.1. Nos descargamos en un PC el instalador que encontraremos en http://www.raspbmc.com/download. Yo he usado el de Windows.



3.2. Descomprimimos el zip resultante, insertamos en el lector de tarjetas del PC la SD en la que vayamos a instalar Raspbmc y ejecutamos el archivo installer.


Nos aparece la venta del instalador. Si optamos por utilizar SD + USB tendremos que marcar la casilla Install Raspbmc to a USB drive (no hace falta insertarlo en este momento). Seleccionamos en la lista de unidades, en la parte superior, la correspondiente a nuestra SD, aceptamos el acuerdo de licencia y hacemos clic en Install. Como podéis apreciar en la captura también es posible arrancar la RPi desde una SD y ejecutar XBMC directamente desde un servidor NFS en red, pero de esto nos olvidaremos en esta guía.


3.3. Al cabo de unos minutos el proceso habrá concluido.


El instalador solo ha utilizado unos 70MB en la SD, pero esta partición se expandirá posteriormente para aprovechar todo el espacio disponible.



4. Instalando Raspbmc.

4.1. Esto es fácil: Insertamos la SD (y el disco USB si hemos escogido esa posibilidad) en la RPi, la conectamos a la tele y a la red y la ponemos en marcha. No es necesario conectarle teclado o ratón dado que el proceso es totalmente automático. Al cabo de unos instantes nos aparecerá un mensaje de bienvenida.


No hay que tocar absolutamente nada, tan solo armarse de paciencia y esperar unos 20 minutos entre tanto se descarga de Internet (ahora sí) Raspbmc, se descomprime y se instala.




En mi caso el proceso duró algo más porque Raspbmc se autoactualizó tras completar la instalación inicial a una versión de reciente lanzamiento.

4.2. Tras unos cuantos reinicios automáticos tendremos que seleccionar el idioma con el que queremos trabajar. Estableceremos el que prefiramos utilizando el mando a distancia de la tele o del receptor multicanal al que hayamos conectado la RPi (maravillas del HDMI - CEC).


...y por fin nos encontraremos con la interfaz de XBMC en pantalla. 




5. Configuración general.


5.1. Utilizando el menú, nos vamos a Ajustes > Apariencia > Internacional y establecemos Región, País y Huso horario.


5.2. Ajustes > Vídeos > Reproducción:
  • Ajustar frecuencia de refresco de pantalla al vídeo: Al empezar o parar (parámetro crítico).
  • Pausar durante el cambio frec. de actualización: xx segundos. Al cambiar el modo de presentación del dispositivo de visualización (tele o proyector) para adaptarlo a la cadencia con la que está codificado el vídeo la imagen se queda en negro unos instantes en tanto se efectua la sincronización con el reproductor. Con este ajuste le decimos a XBMC que retrase el inicio de la reproducción esperando a que el visualizador esté listo para no perdernos los primeros segundos de la peli. No hay más remedio que ir probando con distintos valores hasta dar con el correcto. En mi caso ha sido de 6 segundos.
  • Método sincronización de A/V: Reloj de vídeo (Audio Drop/Dupe) (parámetro crítico).


5.3. Ajustes > Sistema > Hardware de vídeo:
  • Ajustamos Resolución (podemos dejarlo en Auto) y Frecuencia de actualización (50 o 60 Hz).
  • Sinc. de refresco vertical: Deshabilitado (parámetro crítico).

5.4. Ajustes > Sistema> Salida de audio:


Se indica el número de altavoces disponibles. Si el dispositivo al que conectamos la RPi acepta audio en AC3 y DTS en crudo (bitstream) marcaremos las opciones correspondientes. Como decía más arriba, lo aconsejable es que así sea porque la descodificación de estos formatos en software no funciona correctamente, al menos por el momento.


5.5. Ajustes > Servicios > Airplay > Permitir a XBMC recibir contenido de AirPlay: Activado.



6. Configuración específica de Raspbmc.

Para tocar ciertas cosillas particulares de la Raspberry Pi nos vamos ahora a la opción Programas en el menú principal de XBMC y abrimos Raspbmc Settings.


6.1. En Network Configuration vemos que Raspbmc ha obtenido de nuestro router una dirección IP por medio de DHCP. Nos fijaremos en IP address, más tarde la necesitaremos. Utilizamos una conexión cableada, que es lo recomendable para poder reproducir a través de la red archivos pesados.


6.2. Vamos ahora a System Configuration, donde hay bastantes cosas interesantes.

Aquí introduciremos las claves, si es que las hemos adquirido, para activar la reproducción por hardware de archivos en mpeg2 y VC-1.


Overclocking (parámetro crítico): Raspbmc incorpora una serie de perfiles que aumentan la velocidad de los distintos componentes de la RPi (procesador, memoria, núcleo gráfico, voltaje, etc.) por encima de los valores de serie, es más, de entrada se incrementa ligeramente la velocidad de la CPU. Además podemos ajustar estos valores sobre especificándolos a nuestro gusto si activamos el Advanced overclocking. Si vamos con un poquito de cuidado y no hacemos el burro no tiene por qué pasar nada malo, aunque evidentemente esta práctica tiene sus riesgos. A menos que llevemos a la RPi por encima de sus valores de fábrica ya os adelanto que será imposible reproducir archivos muy pesados a través de la red y probablemente tampoco lo lograremos desde una unidad USB local. Los valores que propongo los he obtenido tras realizar bastantes pruebas y habiéndome asegurado de que al menos mi RPi no se calienta en exceso tras largos periodos de uso. No son valores excesivos por lo que creo que cualquier RPi los aguantará sin problemas.


CPU = 900 / Core, ISP, GPU = 400 / RAM = 450
Over Voltage = 4 

A pesar de todo y nuevamente, mucho cuidado con esto porque no todas las unidades toleran del mismo modo el overclocking. Es buena idea comprobar periódicamente la temperatura de la RPi, ante valores superiores a los 75º deberíamos ir con cuidado.

Info del Sistema > Vídeo:


Info del Sistema > Hardware:



En el apartado de servicios (Service Management) los desactivaremos todos excepto SSH Server, que usaremos a continuación. También deshabilitaremos el cortafuegos activando la opción Disable Firewall. Dado que la RPi tiene recursos hardware limitados la idea es eliminar todo aquello que no necesitemos para reducir el consumo de memoria y CPU.


Haremos clic en el botón OK y Raspbmc nos indicará que debe reiniciarse para que los ajustes tengan efecto (no siempre es necesario).



7. Mejorando la transferencia en red hasta el infinito y más allá.

Puede que con esto ya tengamos suficiente. Ahora bien, casi con total seguridad tendremos que ir más allá si pretendemos reproducir archivos realmente pesados a través de la red. Me refiero a archivos mkv, m2ts y estructuras de carpetas, normalmente copias 1:1 de un bluray, que presenten tasas de bits por encima de los 30Mbps.

Pongo 2 ejemplos de archivos que no acaban de reproducirse correctamente a pesar de todos los ajustes hechos hasta el momento:


El protocolo de red NFS, característico en entornos Linux, resulta más eficiente que smb/cifs, habitual en el mundo Windows. Cuando le añadimos carpetas compartidas en red a XBMC podemos utilizar uno u otro en función de las características del servidor de red en el que tengamos almacenados nuestros archivos multimedia. Siempre que podamos escogeremos por tanto nfs. 

Si se utiliza Windows para compartir los archivos en red se puede recurrir a haneWIN NFS server. En nosolohd han publicado una pequeña guía sobre su configuración y uso conjunto con un reproductor multimedia de Netgear. Lo dicho allí es aplicable aquí con nuestra RPi.

Si llegados a este punto únicamente pensáis reproducir archivos contenidos en un disco USB conectado a la RPi o simplemente no tenéis problemas de buffering en la reproducción podéis dejar de leer. En caso contrario sigamos.

A pesar del uso de NFS para acceder a vuestra mediateca en red es más que probable que la reproducción se detenga en ocasiones para rellenar buffers. En ese caso podemos extraer unas gotas más de prestaciones haciendo que se monte automáticamente como local al iniciar Raspbmc la carpeta que el servidor comparte por medio de nfs. Para ello tendremos que conectarnos a la RPi a través de un protocolo denominado SSH.

Si utilizáis OS X o Linux esto se hace de un modo extremadamente sencillo desde el Terminal:


No obstante dado que en esta guía estamos trabajando con Windows veremos cómo hacerlo con PuTTy, cuyo ejecutable podemos descargar desde aquí. Guardamos el archivo en el escritorio, por ejemplo, y lo ejecutamos. No es necesario instalar nada. En la ventana de conexión introducimos la IP de la RPi (recordad que la veíamos en 6.1) y establecemos Connection type a SSH.


Hacemos clic en Open. Seguramente aparecerá una ventana indicando que es la primera vez que se establece una conexión segura con este dispositivo. Aceptaremos sin darle más vueltas.


Se nos pedirá un usuario (pi) y clave (raspberry) para completar la conexión.


...y ya estamos dentro. La primera vez que nos conectemos utilizando una terminal remota a la RPi nos aparecerá una ventana de selección de la configuración local (teclado e idioma). Aunque no tiene demasiada importancia, escogeremos es_ES.UTF-8 UTF-8:




Ahora hay que crear el punto de montaje y editar el archivo /etc/fstab, que contiene una lista de los sistemas de archivos que se montarán al arrancar Raspbmc, para añadir nuestra carpeta en red. Lo haremos mediante estos 2 comandos:

sudo mkdir /media/mediateca
sudo nano /etc/fstab



Y añadiremos la línea (particular en mi caso):

192.168.1.100:/mediateca /media/mediateca nfs _netdev,defaults,user,auto,noatime,intr 0 0

Ojo que todo va en la misma línea.

Pulsaremos a continuación CTRL + X para cerrar el editor de texto, confirmando los cambios (Y).

Descompongamos la línea anterior:
  • 192.168.1.100 > IP del sistema que comparte mis archivos AV, en este caso un NAS.
  • mediateca > Nombre de la carpeta compartida a través de nfs en mi NAS.
  • /media/mediateca > Punto de montaje de la carpeta en red en el sistema de archivos local de la RPi.
  • El resto (nfs _netdev,defaults...) debemos dejarlos tal cual. Baste indicar que son los responsables de la mejora de prestaciones que obtendremos al reproducir a través de la red.
Ya solo nos queda cerrar PuTTy, desactivar el servidor SSH (apartado 6.2) y reiniciar XBMC.


8. Agregando contenidos a XBMC.

Con esto lo que habremos conseguido es que uno de los directorios del sistema de archivos local (en la SD o el disco USB) de la RPi quede enlazado al arrancar Raspbmc con los contenidos de la carpeta en red compartida por el servidor. A la hora de añadir carpetas, ya en la interfaz de XBMC, nos dirigiremos ahora a /media/mediateca en el sistema de archivos local de la RPi en lugar de seleccionar de entre las opciones que nos ofrece el reproductor las que se corresponden a la exploración de la red local. Veámoslo con algún pantallazo adicional:

Primero vamos a Videos > Archivos > Añadir Vídeos.... y haremos clic en Buscar en la ventana que se abre a continuación:


Ahora Raíz del sistema de archivos:



Navegamos a /media/mediateca. Dentro debe aparecer el contenido de la carpeta compartida en red en el servidor, con todas sus subcarpetas. Marcamos la que nos interese (o ninguna para añadir la carpeta mediateca en su totalidad) y click en OK.


Volverá a aparecer la ventana de selección de fuentes. Podemos hacer clic en OK o añadir más fuentes (carpetas), cuyo contenido aparecerá de modo conjunto con el del resto de las que hayamos agregado previamente. Esto es muy útil para consolidar en una sola carpeta (fuente) virtual, que XBMC tratará como una entidad única, varias carpetas que contengan vídeos, incluso cuando se encuentren en servidores distintos.


Tras seleccionar OK tendremos que indicar el tipo de contenido en esta fuente (pelis, series, música, etc. etc.). Esto es útil en el modo de biblioteca de XBMC, en el que éste cataloga y descarga información de Internet relativa a los contenidos utilizando lo que se denomina un scraper, algo así como un recolector de metadatos. Aunque el resultado puede ser muy espectacular, en este caso prescindiremos de estas sofisticaciones dado que hay que dedicarle bastante tiempo a nombrar correctamente los archivos que cataloguemos, revisar su correcta clasificación y, por si fuera poco, supone una carga para la CPU de nuestra RPi, que no va precisamente sobrada.


En mi caso he repetido las operaciones anteriores (Añadir Vídeos...) para exponer las subcarpetas Video y Descargas, contenidas en mi mediateca, pero de modo independiente.


9. Encendido, apagado y otras historias.

La Raspberry Pi se alimenta a través de un cable micro USB. Lo habitual es utilizar cualquier adaptador de corriente USB estándar, que proporciona 5V, como el que utilizan muchos teléfonos móviles. La única recomendación es que sea capaz de suministrar una corriente de 750mA - 1A y además lo haga de modo estable. Por otro lado el aparatito no dispone de interruptor de encendido (aunque es posible hacer alguna que otra chapucilla al respecto) y lógicamente debe ser apagado de un modo controlado utilizando la opción correspondiente en XBMC. Hacer caso omiso de esta recomendación y tirar del cable de alimentación supone jugársela... y hay bastante papeletas para que nos toque una estupenda corrupción del sistema de archivos de la SD (doy fé de ello). Mencionar también que realmente no se apaga totalmente a menos que la desconectemos de la alimentación, simplemente queda en un estado de reposo evidenciado por un único LED rojo en su parte superior.

Las anteriores consideraciones desaconsejan intentar cosas como conectar la RPi directamente a uno de los puertos USB de la tele... El encendido será cómodo, pero el apagado, al desconectar la tele, a lo bruto. Mala idea.

Como en mi sistema la RPi está conectada por HDMI a un receptor multicanal, he optado por alimentarla también a partir de su puerto USB:


De este modo al poner en marcha el receptor, utilizando su mando a distancia, la RPi también arranca. El inconveniente está en que luego nos tenemos que acordar de apagarla correctamente antes de desconectar el receptor. Es fácil que se nos olvide, especialmente si estamos utilizando otra fuente, en cuyo caso hay que seleccionar la entrada correspondiente a la RPi y dar la orden de apagado desde XBMC.

Para solucionarlo podemos recurrir nuevamente al sistema de control CEC de la norma HDMI.

Lo primero será decirle a XBMC que se apague si detecta que hemos desconectado la tele. Para ello vamos a Ajustes > Sistema > Dispositivos de entrada > Periféricos.


Seleccionamos CEC Adapter para ajustar su configuración.


Y estableceremos el parámetro Cuando se apague el televisor al valor Apagar, dejando el resto en sus ajustes por defecto tal y como se muestran en la imagen anterior.

En mi tele al menos (Samsung B650) ha sido también necesario establecer el Apagado automático a en sus ajustes del control HDMI. Ojo con la imagen porque aunque aparezca XBMC de fondo se trata del menú de la tele.


Ahora basta con apagar la tele para que XBMC inicie un cierre controlado de la Raspberry Pi. En cuanto tras unos pocos segundos se desactivan todos sus LEDs (excepto el de color rojo) ya puedo apagar el receptor con seguridad, lo que a su vez corta totalmente la alimentación de la RPi. Y todo desde el mando a distancia. Me parece bastante práctico.


10. A disfrutar del tinglado.

Aunque las imágenes tomadas con la cámara del móvil no le hacen justicia al resultado en pantalla, no me resisto a incluir algunas instantáneas de Raspbmc reproduciendo tanto musiquita como vídeo en calidad bluray a casi 40Mbps.









Bueno, pues hasta aquí llega esta guía de instalación. Confío en que no se haya hecho demasiado pesada y que pueda servir de apoyo para quienes quieran montarse un reproductor multimedia bastante apañado (y económico) con una Raspberry Pi.

Aunque como decía más arriba (aún) existen numerosas carencias creo que el resultado es mucho más que aceptable.

6 comentarios :

Sergio dijo...

Lo primero agradecerte ese pedazo de guía que te has montado, da gusto ver un poco de altruismo de vez en cuando. Te quería hacer una pregunta, estoy esperando mi Raspberry y estoy leyendo ya algo sobre el tema y me he dado cuenta que mi A/V Denon no tiene entrada de audio por hdmi, tiene coaxial y óptica, además de las RCA.

¿Se te ocurre algo para poder conectar la Pi al Deco de Audio?

Gracias por adelantado.

Pablo Felip dijo...

Gracias, Sergio.

Como ya te han explicado otros compañeros en forodvd la cuestión pasa por un conversor HDMI a SPDIF.

La salida analógica de la RPi es deficiente, no creo que sea una buena alternativa.

Utilizar la tele como "repetidor" es una posibilidad, pero normalmente las salidas digitales que llevan solo emiten PCM estéreo. No estoy muy puesto en estas cuestiones, pero creo que depende de marcas (si mal no recuerdo algunas Philips eran más "generosas" en este sentido).

Omar Marrugat Garcia dijo...

2 palabras: Es lo que estaba buscando hace ya mucho tiempo. Todo completo, paso a paso…..
Eres un dios!!! Gracias!!!
Hace tiempo que tengo problemas con la Raspberry. Creo que de tanto trastear, algo he tocado que se me cuelga todo. Ultimamente las películas se me cortan al cuarto de hora, la radio también…
Cada foro dice que hagas una cosa, otro otra y creo que por eso he tocado algo que no debería y aun haciendo la súper configuración tuya, sigue igual. Creo que voy a tener que empezar de cero, borrar la sd de 8 GB clase 10 e instalar el raspbmc.
Entonces, volveré a configurar tal y como indicaste.
Un saludo y muchas gracias!!

SYJ dijo...

Hola
Podrias indicar como revertir lo de la conexion de red ? ahora querria poder conectar un USB y no me deja :/

gracias por este gran aporte

Antonio dijo...

Una pregunta ,he aplicado todos los ajustes hasta lo de montar el nfs , y la peli se me para , sin embargo con el xbmc instalado en un portatil por wifi no se para , por lo tanto no es cosa de red no ?

Como podria solucionarlo.

Gracias por la guia

Pablo Felip dijo...

Hola, Antonio, y gracias por leer la guía.

Ya hemos hablado en privado :-). Espero que consigas solucionar esos problemas.