Este apunte lo empecé a principios del 2015 pero lo he ido actualizando con el tiempo. En aquel entonces andaba yo buscando un Media Center casero de siguiente generación conectado a mi TV, un “pata negra” que no sea demasiado caro, que pueda conectarse por cable ethernet a un “mundo” de múltiples fuentes que incluya música, fotos, videos familiares o películas o series (tanto SD o HD) y que sea capaz de reproducir TV en tiempo real (SD o HD), que soporte bitrates altos (~40Mbps) independiente de cual sea la fuente (antena, satélite, internet).

El ganador fue (y sigue siendo) la Raspberry Pi con el software OpenELEC. Han pasado por mi mano la Pi1, Pi2 y Pi3, mismos precios y a cada cual más moderna y potente, así que a pesar de que dejo documentadas cosas sobre las antiguas te recomiendo irte por supuesto a la última. Para la Pi1 probé hasta la versión “OpenElec 4.0.5”, con la Pi2 y Pi3 las versiones “OpenElec 6.0.3 -> Kodi v15 Isengard” y “OpenElec 7.0B2 -> Kodi v16 Jarvis”. También proble “OSMC” auqnue me he quedado con OpenElec (principalmente por el Skin, no me convence el de OSMC).

Nota: ¿porqué no hablo de Wifi?: Pues porque busco el mejor rendimiento y eliminar posibles puntos de fallo o empeoramiento de las condiciones de ancho de banda. Una vez que pruebes y re-pruebes todo y estes convencido de que va “PERFECTO”, entonces es cuando deberías añadir la “variable” Wifi y por supuesto probar de nuevo (nota: en mi casa sigo sin usar WiFi, para streams HD no consigo que vaya fino).

La lista de la compra:

El Hardware

  • Raspberry Pi Model B+ 1.2 (versión 1)
    • Broadcom BCM2835 System on a Chip (SoC)
    • CPU: ARM1176JZF-S 700 MHz
    • GPU: VideoCore IV
    • Memoria: 512 MB
  • Raspberry Pi 2 Model B v1.1 (versión 2)
    • Broadcom BCM2836 System on a Chip (SoC)
    • CPU: ARM Cortex-A7 quad-core 900MHz (~6x versión 1)
    • GPU: VideoCore IV (no cambia)
    • Memoria: 1GB LPDDR2 SDRAM (2x versión 1)
    • Compatibilidad total con la Raspberry Pi 1
  • Raspberry Pi 3 Model B v1.1 (versión 2)
    • SoC: Broadcom BCM2837
    • CPU: 4× ARM Cortex-A53, 1.2GHz
    • GPU: Broadcom VideoCore IV
    • RAM: 1GB LPDDR2 (900 MHz)
    • Red: 10/100 Ethernet, 2.4GHz 802.11n wireless
    • Bluetooth: Bluetooth 4.1 Classic, Bluetooth Low Energy

 

Comunes:

  • Transformador de 5.25V y 2.5A
  • Cable USB para el transformador
  • Caja VESA transparente con ventilación
  • Juego de disipadores. Solo hacen falta 2 disipadores:
  • 1 Disipador para el SoC (CPU) de 13x13x5mm
  • 1 Disipador para la LAN de 10x10x5mm
  • Tarjeta Micro-SD (mínimo 8GB Clase 10)

 

Pensé en usar un microventilador pero me ha ido muy bien con solo los disipadores, así que al final no los he instalado. Si lo necesitas, ve a por uno de estos: 15x15x4,5mm, Voltaje: 3.3v-5v, Potencia (Amps): 0.06A, Velocidad: 1300 rpm, Airflow (CFM): 0.42, Max presión del aire: 15.7Pa. He leído por ahí que es posible instalar un sensor de temperatura y bajo demanda activar el ventilador desde un script en phyton.

 

RaspberryPiB+1.2

 

El Software

Todos los paquetes de software que se ejecutan en la Raspberry son de software libre y hay múltiples distribuciones. En el área de Media Center tenemos dos: raspbmc (ahora OSMC) y openelec. Tras múltiples pruebas he optado por OpenElec.

  • Proyecto OpenELEC y enlace a la raíz del proyecto OpenELEC en GitHub y en particular a OpenElec.tv
  • Wiki de OpenELEC y documentación para compilar desde los fuentes (por si quieres trastear y cross-compilar directamente desde GitHub, interesante aprendizaje :-)).

 

Formatear la tarjeta SD

Necesitas una tarjeta SD, recomiendo que sea al menos de 8GB y Clase 10 o superior. Formatear (quick format) con el programa SDFormatter. (que es el que yo uso para Mac)

sdformatter

Raspberry Pi Versión 1: “OpenElec 4.0.5” desde NOOBS

Esta opción usa la instalación desde NOOBS, un paquete preparado por la gente de Raspberry directamente y dejará instalada la versión 4.0.5 de “openelec” que incluye XBMC 13.1 “Ghotam”. Es la versión que mejor me ha funcionado en la Raspberry Pi Model B+ 1.2 (Versión 1). Estos son los pasos realizados en mi Mac:

  • Descargar el ZIP de la versión 1.3.12 de NOOBs. Nota: para la nueva Raspberry Pi versión 2 necesitas que sea versión 1.3.12 o superior. Por otro lado, te recomiendo descargar y usar el torrent.

  • Descomprimir el archivo NOOBS_v1_3_12.zip

  • Arrastrar y copiar todo el contenido dentro del directorio hacia la raíz de la tarjeta SD

  • Desmonta el volumen de la Micro SD, ya está lista para usarse en la Raspberry

  • Insertar la Micro SD en la Raspberry Pi B+, recomiendo que conectes un “teclado y ratón USBs” para ejecutar NOOBS. Conectar el cable de potencia, HDMI, etc.. y arránca el equipo.
    Primer boot NOOBS

Aparecerá una ventana con un listado de los sistemas operativos que puedes instalar, seleccionar “openelec” y clic en “install”. Automáticamente se reformatea/instala en la misma SD la versión de Openelec.

Raspberry Pi Versión 2 o 3: Ejemplo con “OpenElec 5.0.8” desde OpenELEC

Para esta opción vamos a descargar la imagen directamente desde OpenElec, describo cómo instalé esta versión concreta, pero el proceso es el mismo para futuras versiones:

Nota: Con Pi 2 o 3 se soportan bitrates >40Mbps con muchísimo menor consumo de CPU, ahora bien, de ahí (40-45Mbps) no pasa sin sufrir microcortes y es debido a que el chip ethernet LAN9154 emplea el bus USB. En mi caso 99.99% de mi contenido va sobrado con dicho rendimiento (TV 1080 y videos en 1080).

  • Descargar la imagen OpenELEC 5.0.8 (arm) Diskimage desde la sección RaspberryPi-2 Builds en el sitio de OpenELEC.

  • Descomprimir: gunzip OpenELEC-RPi2.arm-5.0.8.img.gz

  • Insertar la tarjeta que se montará como “NO NAME”.

  • Averiguar device (resultó ser /dev/disk5): df -h

  • Desmontar el volumen: sudo diskutil unmount /dev/disk5s1

  • Grabar: sudo dd if=OpenELEC-RPi2.arm-5.0.8.img of=/dev/rdisk5 bs=4194304

 

Boot OpenELEC (XBMC o KODI)

Al arrancar realiza un proceso automático (que incluye un reboot) donde se redimensiona la partición de la Micro-SD y se ejecuta un asistente para la configuración básica de XBMC/KODI. En la Raspberry versión 1 notarás que el interfaz es lento, es normal, tendrás que activar el overclocking más adelante.

Parámetros mínimos que debes tener configurados:

Recuerda, puedes cambiar los ajustes: básico, avanzado y experto

Instalación de licencias MPEG-2 y VC1

La Raspberry cuenta con soporte para codecs MPEG2 y VC1, pero están deshabilitados por defecto, si los necesitas (como en mi caso para ver los streams SD de la TV, o para reproducir .vob’s extraídos de DVD’s o videos familiares en ese formato) puedes adquirir las licencias a través de su tienda. Nota: Si no lo haces e intentas reproducir esas fuentes entonces solo tendrás el audio.

Para adquirir la licencia, conecta vía SSH con tu raspberry como root, averigua el número de serie de la cpu, adquire la licencia para luego instalarla en el fichero config.txt

Cuando pases por la tienda para comprar la licencia y tengas el número podrás instalarla dentro del fichero config.txt, mira un ejemplo donde indico el número de licencia para Mpeg-2

 

Configuración de XBMC/KODI y sus fuentes

Este paso es muy personal, porque cada uno tendrá distintas fuentes con distintos protocolos de acceso. Describo a continuación las que utilizo en mi caso:

 

NAS con videos, fotos y música

En mi caso tengo una NAS QNAP en la dirección 192.168.1.2 y comparto la raiz de mi contenido multimedia usando el protocolo NFS. Aunque se configura vía web, ésta es la línea en el /etc/exports:

"/share/MD0_DATA/Multimedia" *(ro,async,no_root_squash,insecure)

La razón de usar NFS es que consume menos en la raspberry y es más rápido. Desde XBMC/KODI y las áreas de video, música e imágenes añadir los directorios con el recurso “Network Filesystem (NFS)”

  • Nota: Cuando seleccionas el recurso “Network Filesystem (NFS)” lo normal es que aparezca la dirección IP de tu servidor NFS dado que XBMC/KODI envía un broadcast en UDP intentando “descubrir” los servidores NFS activos en tu red. Si no aparece el tuyo la razón está en la configuración de tú servidor NFS. Si te ocurre, puedes configurar la URL a mano.

Después desde Videos, Archivos:

 

Una de mis aficiones es comprar (o que me regalen) series de TV completas, las ripeo en Inglés con subtítulos en Inglés para seguir “estudiando” el idioma, la integración dentro del Media Center es perfecta:

series

 

Sintonizador externo VU+ Ultimo

Si te has hecho con un receptor con sintonizadores de TDT o Satélite, como los VU+ Ultimo o Enigma, puedes activar el Add-On “VU+ / Enigma Client” (fuentes en GitHub) que viene incluido y se activa con:

vuplus1

vuplus2

vuplus3

vuplus4

Sintonizar Movistar TV con un plugin

He descubierto un plugin que tiene muy buena pinta, no he tenido tiempo de probarlo, pero si lo único que quieres es ver los canales de Movistar TV en múltiples TV’s aquí tienes una solución que promete: https://xbmcimagenio.codeplex.com/

 

Sintonizar Movistar TV con Tvheadend

Si te has hecho con un equipo externo (como el MOI+ o MOI Pro que incluye el programa Tvheadend) o tienes un servidor dedicado con Tvheadend y quieres ver los canales de Movistar TV, puedes echar un vistazo a diferentes apuntes que he realizado al respecto. Fuí investigando poco a poco y los tienes a continuación, en orden de más antiguo a más moderno:

 

Control remoto

CEC

Una vez que lo tengas todo configurado y funcionando te recomiendo que utilices el “mando de la TV” activando CEC (Consumer Electronics Control), una funcionalidad que permite a la TV reenviar las órdenes del mando por el cable HDMI a tu raspberry y por lo tanto a XBMC/KODI. Así podrás reducir el número de mandos. Tienes muchas más alternativas como usar un teclado (usb y/o bluetooth) o bien mandos remotos específicos, o mejor todavía, una aplicación para tu smartphone (aquí tienes un ejempo, la oficial de XBMC/KODI)

Remoto vía USB

Otra opción es hacerte con un mando remoto que funciona por el puerto USB, tienes muchas opciones en el mercado. Una que a mi me ha gustado mucho y funciona nada más sacarlo de la caja es el HP MCE remote. Aquí tienes una buena comparativa.



Mejorar tu instalación de Kodi

En esta sección explico cómo conseguir tres “mejoras” a tu instalación de Kodi que para mi son muy necesarias:

  • Que el Servicio de TV se apague de forma automática a la hora y media sin interactuar con el mando remoto.
    • Se consigue con dos plugins (Kodi Callbaks, Sleep Timer) y dos scripts (screen_off.sh, screen_on.sh)
  • Que Kodi detecte cuando se ha añadido algo nuevo (Pelis, Series, Audio, …) y auto-reconstruya sus Librerías.
    • Se consigue con un plugin (Watchdog)
  • Que el botón ON/OFF del mando remoto ponga en standby a Kodi (Off) o lo despierte (On), en vez de “Apagarlo”.
    • Se consigue con el script “powerButton.py” y tocando la configuración.

 

Scripts de apoyo

Antes de nada crea tres scripts de apoyo en tu equipo Openelec. Conecta vía SSH, cambia al directorio /storage y crea tres scripts (a continuación tienes un ejemplo). Haz que los tres sean ejecutables (chmod):

  • Conecta vía SSH

 

  • Crea el fichero .kodi/userdata/keymaps/keyPower.xml 

 

  • Crea el fichero /storage/powerButton.py

 

  • Crea el fichero /storage/screen_off.sh

 

  • Crea el fichero /storage/screen_on.sh 

 

  • Cambia el permiso de los tres scripts a “ejecutable”.

 

 

Instalación de Plugins

Necesito instalar tres plugins. Instálalos a través de Ajustes->Add-ons->Instalar desde Repositorio->Todos los repositorios->Servicios

  • Kodi Callbacks
  • Sleep Timer
  • Watchdog

 

kodiOnOff_2 kodiOnOff_3 kodiOnOff_4  kodiOnOff_6 kodiOnOff_7 kodiOnOff_8 kodiOnOff_9

Configuración de los Plugins

Una vez instalados entramos a configurarlos:

Kodi Callbacks

Entramos en la configuración de Kodi Callbacks, definimos como TASK #1 el script /storage/screen_off.sh y como TASK #2 el script /storage/screen_on.sh

kodi_cb0 kodi_cb1 kodi_cb2

Definimos dos eventos, el EVENTO #1on Screensaver Activated” que ejecute el TASK #1 (script /storage/screen_off.sh) y el EVENTO #2on Screensaver Deactivated” que ejecute el TASK #2 (script /storage/screen_on.sh)

kodi_cb3 kodi_cb4

El resto lo dejamos por defecto

kodi_cb5 kodi_cb6

 

Sleep Timer

Entramos en la configuración,

kodi_st3

Configuramos primero GENERAL, cómo iniciar el Sleep Timer

kodi_st0

Después configuramos AUDIO/VIDEO SUPERVISIÓN, donde indicamos “cuando” queremos que se active el Timer.

kodi_st1 kodi_st2

En este ejemplo vemos que a los 90 minutos de inactividad (no iteración con Kodi) se hará un trigger del Timer y cuando venza el timeout del diálogo (nos da 45seg para abortar) se activará el “Screensaver”, y ya vimos qué pasa cuando se activa el screensaver en el otro plugin (Kodi Callbacks), te lo recuerdo: el EVENTO #1on Screensaver Activated” ejecuta el TASK #1 (script /storage/screen_off.sh). Traducido significa que a la hora y media de no tocar el mando remoto muestra una caja de diálogo para abortar y si no lo hacemos en 45 segundos pues se apaga Kodi (se pone a dormir, NO apaga la raspberry).

 

Watchdog

El objetivo es que cada vez que xxxxx relea la libería. Activamos el plugin y entramos en su configuración para dejarla como ves a continuación.

 

kodi_wd1 kodi_wd2 kodi_wd3

 

Reprogramar el boton ON/OFF del Remote

Por último, veamos cómo reprogramar el botón de apagado/encendido del mando para despertar/dormir a Kodi, cerrando el círculo. Entra en tu equipo vía SSH y edita el siguiente fichero.

  • keyPower.xml bajo .kodi/userdata/keymaps

  • Rearranca el equipo y cuando pulses el botón de Power (Apagado/Encendido) del mando remoto que a su vez ejecutará el script powerButton.py, que “dormirá” o “despertará” a Kodi, en vez de apagar el sistema operativo.

Nota: El consumo de energía (eléctrica) de una Raspberry donde KODI está durmiendo es mínimo.

 

 

Parametrizar Openelec

Monitorizar

Durante la instalación y puesta en marcha me han venido bien una serie de herramientas, empiezo por la de monitorización. Para poder monitorizar la Raspberry recomiendo descargar el script bcmstat.sh desde aquí.

  • Lanzar la monitorización: ./bcmstat.sh cgxd10

monitorizarraspberry copy

 

Mejorar el rendimiento

Lo que describo a continuación NO lo hago en la Raspberry PI 3.

  • Overclocking en Raspberry Pi Model B+ 1.2 (versión 1)

Para modificar el overclocking conecta con tu raspberry (usa SSH, usuario root, password “openelec”). La configuración siguiente pone a “tope” la CPU cuando lo necesita, irá conmutando entre 700-1000 Mhz bajo demada. Una vez más, es MUY importante instalar al menos disipadores (y quizá necesites micro ventilador si la temperatura ambiente es alta).

 

  • Overclocking en Raspberry Pi 2 Model B v1.1 (versión 2)

En el caso de la Pi2 he decidido usar la opción “High” y sin turbo, de hecho el monitor “High” demuestra que pocas veces necesita subir los MHz.

 

NOTA: Recomiendo tener una fuente de alimentación de 5.25V y 2.5A o podrías ver un cuadrado de colores en la parte superior derecha avisando de bajo voltaje. Si estás seguro que tu fuente es la correcta siempre puedes quitarlo con avoid_warnings=(1 o 2) en /flash/config.txt.

El significado de esta opción es el siguiente: avoid_warnings=1 elimina el recuadro de colores que avisa de voltaje bajo. Por otro lado, avoid_warnings=2 además permite activar el turbo incluso en condiciones de bajo voltaje.

  • Cambiar el swapping

Un script que cambia el swapping y alguna cosa más, lo bajo de internet y lo ejecuto. Dejo una copia de todas formas aquí:

 

  • Opciones avanzadas

Puedes parametrizar las opciones avanzadas en el fichero advancesettings.xml.

  • Buffering

Si quieres “jugar” con el buffering puedes activar la opción que más te apetezca. Aquí tienes la documentación con ejempos.

  • Otras opciones

Si buscas en internet encontrarás un montón de documentación para “mejorar” el rendimieto de tu raspberry, te recomiendo que eches un ojo porque puede beneficiarte. En mi caso no he tenido que hacer nada más diferente a lo anterior.

 

 

Backup y Clonar

Por último veamos cómo resuelvo el hacer un bakcup o clonado de la Raspberry. El caso de uso es simple: para evitar pérdidas de datos o simplemente para ahorrarte a configurar todo de nuevo cuando quieras instalar tu segunda Raspberry.

Clonar (backup) la Micro-SD hacia un “fichero imagen”

El siguiente proceso clona la Micro-SD, es deicr, hace una copia exacta y lo guarda en un fichero (que llamamos “imagen”) en el disco duro de mi iMac. Uso la versión raw del device (notar la “r”) en el nombre del dispositivo para que vaya más rápido (acceso a disco en modo raw en vez de en modo bloque), aún así hablamos de “minutos” para copiar una SD de 8GB (es un proceso lento).

  • No te olvides: asegurate de comprobar cual es el nombre del disco identificado para tu Micro-SD, equivocarte aquí podría ser fatal, dado que el comando “dd” no pide permiso, simplemente ejecuta. En el ejemplos siguiente se detecta que se ha asignado disk3 a la Micro-SD al conectarla.

 

Clonar (restaurar) la imagen hacia una Micro-SD

El proceso contrario, cuando quieras crear una nueva Micro-SD con una copia exacta de la fuente (la original), simplemente clonas la imagen anterior hacia la Micro-SD.

No es necesario pero te recomiendo formatearla antes la Micro-SD destino con SDFormatter, usando formato rápido, así te aseguras que se reconoce bien en el sistema operativo. Una vez formateada el Mac la montará, por lo que podemos de nuevo comprobar qué nombre de “device” le ha sido asignado, a continuación ejecutamos el comando “dd” pero al revés. RECUERDA: FIJATE MUY BIEN porque “dd” no avisa y podrías cargarte tu disco principal si te equivocas.

  • Clonamos desde la imagen a la Micro-SD

Durante el proceso de copia verás simplemente un cursor parpadeando durante varios minutos, una vez que termina mostrará el número de bytes escritos. A partir de aquí hacemos boot con la nueva tarjeta. Recomiendo cambiarle el nombre a este segundo sistema y además borrar la configuración de SSH para que no use los mismos certificados que el antiguo (el fuente desde el cual partimos)

  • Cambia el nombre de tu nuevo media center, hay que hacerlo en dos sitios, puedes usar el mismo para ambos o que sean diferentes, mira un ejemplo

El primero “Nombre del Dispositivo” (en SISTEMA -> Ajustes -> Servicios ->General) es el que se usa para anunciar servicios como UPnP, web, control remoto, zeroconf o AirPlay.

xbmc-nombre-dispositivoEl Segundo es el “Nombre del Sistema” (SISTEMA -> OpenELEC -> Sistema) y se trata del hostname de linux, así que será el que veamos por ejemplo anunciado con el servicio Samba (compartición de ficheros).

xbmc-nombre-sistema

  • Limpiamos la configuración SSH borrando los certificados y rearrancamos el equipo.

Al arrancar el daemon de ssh se regenerarán los certificados y la próxima vez que conectes observarás que ha cambiado el nombre del Host.

  • No olvides de poner la licencia específica de MPEG-2 y/o VC1 para tu raspberry.

 

Capturar pantallazos

Si quieres hacer una captura de lo que estás viendo en pantalla (screenshot, screencapture) puedes usar el comando siguiente desde tu Raspberry. Dejará el resultado en el directorio /storage/screenshots y podrás enviarlo a tu ordenador vía scp por ejemplo.