martes, 26 de marzo de 2013

Rapberry Pi: Grabar y emitir TV


He visto en http://misapuntesde.com/post.php?id=108 el siguiente artículo:
En esta revista nos enseñan varios trucos, aplicaciones y como hacer stream y grabar canales de TV a través de nuestra Raspberry Pi. También nos enseña varias distribuciones para elegir la que más nos guste.

PD: Animo a la gente que pueda, compre la revista o mejor se suscriba a ella.
Descarga: Artículo Linux Format UK Abril 2013 https://jumpshare.com/b/Ex4hAsWYhdYlbEQulCL3
Suscripción: Linux Format UK http://www.myfavouritemagazines.co.uk/content/lp/linuxformat/

y he decidido intentar traducirlo, aquí os lo dejo:
(Ojo, traducción libre, a mi manera, aún no lo he probado)

Después de años batallando con MythTV, Graham Morrison ha descubierto, gracias a Tvheadend, una solución mucho mejor.


   Muchos de esos cacharritos que tenemos bajo los televisores ya utilizan Linux. Y a pesar de su poca potencia son mas que capaces de grabar y reproducir muchos canales al mismo tiempo, como también son capaces de emitir su contenido usando nuestra red local. Nuestro Raspberry Pi está perfectamente capacitado para hacerlo también, y con el hardware apropiado puede convertirse en un potente y barato grabador dotado de posibilidad de emisión en streaming, programación y pausa inteligente (time shift).
   El elejir bien el hardware es la clave en lo dicho y nos ahorrará mas de un quebradero de cabeza. Afortunadamente, el kernel de Linux soporta muchos de estos dispositivos que funcionarán sin modificarlo. Hemos dividido el tutorial en 10 pasos, de manera que las instrucciones seán lo más claro posible ypodamos seguirlas fácilmente. Al final de este proyecto, se encontrará con una potente plataforma capaz de grabar múltiples programas de varias fuentes, todo ello desde nuestro humilde Raspberry Pi, el perfecto complemento para nuestro recién estrenado XBMC al que podremos acceder desde cualquier equipo conectado a nuestra red.

Nuestro hardware

  Se han probado y configurado dos receptores USB, uno para TDT (dvb-t) y otro para satélite (dvb-s). Hemos incluido instrucciones para ambos. Para la recepción TDT hemos usado el Sundtek Sky TV Ultimate, la  última versión incluye un adaptador de 12 voltios que debemos conectar. Pero hay un dispositivo muy importante para conectarlos a nuestra Raspberry Pi, deben conectarse a través de un hub USB: Perdimos dos días intentando configurar el sistema, primero sin un hub USB y después con otro incompatible. En ambos casos todo parecía ir bien, sin embargo eran incapaces de sintonizar canal alguno. Después de cambiar a un hub USB de los que tienen un alimentador de corriente, conseguimos solventarlo así que debemos poner énfasis en este punto. (comentario propio) Si este hub alimentado tiene la suficiente potencia (recomiendo uno de 2 amperios o más, yo lo encontré) podremos utilizarlo para alimentar, no solo a los receptores USB, también al R-Pi. Mi sistema quedó algo así:


R-Pi------------- Hub alimentado ------------ receptor USB ---- antena (no te olvides de ella)
 |________________|              |
                                           Alimentador ---- (enchufe, por supuesto :) )

Almacenamiento externo

   Asumimos que dispones de tu R-pi  con la distribución Raspbian instalada y actualizada. También asumimos que esta conectado a Internet y que tecleas los comandos directamente es su consola o a través de una sesión SSH. Nuestra siguiente consideración es donde guardar las grabaciones. Recomendamos usar un disco duro USB externo para no agotar las capacidades de lectura/escritura de la tarjeta SD, tanto en espacio como los ciclos soportados por estos dispositivos y que al paercer son finitos. Simplemente conéctalo a un puerto libre USB y comprueba que está ahí echando un vistazo a los log del sistema ejecutando la orden tail /var/log/messages . Verás una linea similar a esto "usb-1-1.3.4.2:New USB device", fíjate en el identificador del dispositivo que será algo así como sda:sda1. sda es el disco en sí y sda1 la partición. Tecléa  sudo mkdir /mnt/storage para crear un punto de montaje y sudo mount /dev/sda1 /mnt/storage/ para conectar a tu dispositivo externo.

Instalar los controladores

   Dependiendo del sintonizador que estés usando, este paso puede no ser necesario. Si tu dispositivo es compatible con Linux y no requiere de drivers adicionales, entonces solo necesitas conectarlo y pasar al punto siguiente. Para nuestro adaptador Sundtek, necesitamos descargar e instalar el controlador. Es fácil, teclea:
wget http://www.sundtek.de/media/sundtek_netinst.sh
chmod 777 sindtek_netinst.sh
sudo ./sundtek_netinst.sh
   La última línea ejecutará el script que descargaste en la primera. Detectará el sistema que estas usando e instalará la última versión de los drivers. Los controladores quedarán configurados y funcionando en el arranque. Los usuarios con la versión terrestre (TDT o DVB-T)  necesitarán ejecutar este comando:
/opt/bin/mediaclient --setdtvmode=DVBT
   Con ello nos aseguramos de que se configure para la recepción de TDT en vez de por cable, de lo que también es capaz.

Instalar Tvheadend

   El software o programa que vamos a usar para grabar y emitir la señal de televisión digital se llama Tvheadend. Hay un plugin para la última versión XBMC que convertirá este sorprendente media player en un completo grabador con Tvheadend haciendo el trabajo en la sala de máquinas de nuestro R-pi. Tvheadend esta constantemente cambiando así que aquí hemos usado la versión en desarrollo pero si quieres omitir este paso, siempre puedes usar la distribución OpenElec en vez de Raspbian. Afortunadamente podemos compilarlo facilmente. Primero instala las herramientas de desarrollo y DVB:
sudo apt-get update
sudo apt-get install unzip libcurl4-openssl-dev pkg-config git build-essential dvb-apps gcc-4.7
   El último paso es descargar la última versión de Tvheadend desde el repositorio del proyecto usando git y compilarlo con la ayuda de  ./configure make y sudo make install
CC=gcc-4.7 ./configure; make; sudo make install


Configurando Tvheadend

La interfaz de usuario de Tvheadend es accesible a través de un navegador web, pero primero es necesario iniciarlo. Como es la primera vez, ejecutaremos el servicio en modo configuración y como todo demonio, lo cual significa que se ejecutará en sengundo plano. Para hacer esto teclea:
tvheadend -C -d
Ahora abre tu navegador, preferiblemente desde otra máguina en la red y vete a la siguiente dirección: http://ip_del_Rpi:9981/extjs.html. donde ip_del_Rpi es la dirección IP de tu Raspberry la cual podemos conocer ejecutando el comando ifconfig. El navegador mostrará la interfaz predeterminada de Tvheadend. Aquí es donde puedes ver todos lo datos del programa y ver y configurar grabaciones. Necesitamos decirle como usar el sintonizador que hemos conectado. Haz click en Configuration > TV Adapters y selecciona tu dispositivo de la lista. El siguiente paso dependerá de si estas sintonizando una señal satélite o terrestre, vamos a separarlo en los siguientes pasos. Para la recepción terrestre sáltate el siguiente paso.


Recepción por satélite

 (no me preguntes sobre esto pues no tengo practicamente ni idea ni dispongo de tal adaptador, si hay algún amable lector que me pueda corregir, será de agradecer por todos los lectores)

La recepción por satélite es la más sencilla de configurar. Con el adaptador selecionado, la página General mostrará un resumen de la configuración. Primero marque la casilla Enable seguido de Save para guardar el cambio. Queremos añadir alguna información de canal, esto se hace  buscando el satélite y los multiplexores de los que dispone y después buscando los canales que podemos recibir a través de estos multiplexores. Tvheadend incluye los datos para la localización de satélites, así que simplemente necesitas hacer click en Add DVB Network by location (botón que esta a la izquierda). Esto nos abrirá una ventana conteniendo una lista de satélites. Para el Reino Unido y norte de Europa , la mejor opción es Astra_28_2E.
Después de seleccionar el satélite. Tvheadend añadira una lista de multiplexores asiciados. Estos serán ahora escaneados en busca de canales, proceso del cual puedes ver su progreso en la sección Capabilities que está a la derecha de la página General. Si todo funciona bien, podremos ver una lista de servicios (canales) detectados y añadidos en la página Services. Para el Astra_28_2E hemos detectado 970 servicios de 98 muxores. A menos que también quieras configurar el sistema también para la recepción terrestre, sáltate el punto siguiente.



Recepción terrestre (TDT o DVB-T)

(Mi receptor con chip Afatech está pidiendo a gritos que lo pruebe, cuando lo haga os lo comento, mientras tanto disculpad si no respondo a las preguntas)

Primero, habilita el receptor en la página general. El programa (estoy harto de escribir Tvheadend) incluye una amplia lista de transmisores preconfigurados con los detalles de cada multiplexor. Necesitas conocer a que centro emisor está apuntando la antena tu antena. En el Reino Unido el  mejor modo de saber dónde están y cuál es el mejor para cada zona en consultando los datos de digitaluk.co.uk donde podemos encontrar los centros emisores (ejemplo para londres: http://www.digitaluk.co.uk/coveragechecker/main/display/alternative/E1+6PX/NA/0 ) y los canales que emiten desde ellos (ej.: http://www.digitaluk.co.uk/coveragechecker/main/display/detailed/E1+6PX/NA/0 ). En nuestro caso deberemos añadirlos manualmente en la pestaña Multiplexes del adaptador, haciendo clic en Add mux(es). En la ventana que aparecerá deberemos indicar la frecuencia, el ancho de banda (8mhz en España) y la "constellation" (¿?) de cada multiplexor dejando el resto de opciones en Auto. Deberás repetir el proceso por cada multiplexor que emita en tu zona. Tvheadend escaneará estas frecuencias para encontrar los canales que emitan cada multiplexor y añadirlas a la configuración.


Añadiendo canales 

Con suerte habrás conseguido una buena lista de servicios extraídos de los multiplexores. El siguiente paso es permitir a Tvheadend que adivine los canales de TV. Nos vamos a la pestaña General haciendo clic en el botón "Map DVB Services to Channels". Con suerte obtendrás una lista de canalaes que aparecerán en la página de canales. Deberemos cambiar el lugar predeterminado en donde se guardarán las grabaciones en la página "Digital Video Recorder", modificando la ruta en "Recording system path" y guardar los cambios para que tengan efecto. También tendermos que configurar la EPG (guía electrónica de programas) Algunos canales nos permiten saber lo que se está emitiendo ahora y otras nos dan mucha más información (varios días). Podemos habilitarlo seleccionando cada servicio de la sección "Over the Air Grabbers" en la página "EPG Grabbers. No olvides guardar los cambios ("Save Configuration").


Grabar un programa

Después de un rato notarás que la página de la Guía Electrónica de Programas (EPG) comienza a rellenarse sola con la programación de los canales que puedes ver o grabar. Haciendo clic en cualquier programa se abrirá otra ventana permitiéndote programar su grabación. Una segunda opción llamada Autorec es aún más interesante. Se establece una búsqueda basada en los datos del programa de manera que puedas programar la grabación de series completas.


Dependiendo del número de canales y la cantidad de información de la EPG, la lista se puede alargar enormemente. Para solventarlo, puedes filtrar la información a mostrar usando las opciones de columnas que están en la parte superior de la lista. Puedes buscar una cadena de texto en el título del programa o restringirlo a un canal. Con Create Aurorec puedes decirle que grabe todo lo que se ajuste a un filtro dado. Para eliminar una programación, haz clic en la pestaña Digital Video Recorder. Las grabaciones programadas pueden anularse en la primera página, las que están basadas en filtros en la última y en la del medio aparecerán las grabaciones ya realizadas para que desde ahí puedas visualizarlas, borrarlas o ver por qué no ha sido posible realizarlas.




Ver los programas grabados y la tele en directo

Si instalas el plugin de VLC en tu navegador, puedes ver los programas grabados y los canales en directo en tu navegador. Solo hemos probado esto con Firefox, pero cuando haces click en un programa que esta siendo emitido, tienes la opción de reproducirlo (PLAY). Si no está instlado el plugin de VLC, se te preguntará si quieres instalarlo. Con el plugin instalado aparecerá una ventana en el navegador, con los controles que están sobre la ventana puedes verlo en pantalla completa o pausar la reproducción. De igual manera puedes ver los programas que has grabado en la página "Digital Video Recorder". Si no quieres usar el navegador, copia la url del enlace para decirle al VLC que la abra directamente en esa u otra máquina conectada a la red. Sin embargo, en nuestra opinión, la mejor manera de aprovechar nuetro Tvheadend es usando la nueva versión de XBMC. Esta, incluye un plugin que puede hablar directamente con el, descargando la guía EPG desde tu Rasberry Pi, permitiéndote ver canales y grabaciones y  programar esa grabación de tu programa favorito. Es fácil instalarlo. Visita la página del plugin PVR de XBMC.
A continuación en este estupendo artículo nos dicen que se han impuesto como taréa, para el ejemplar del mes siguiente, cubrir XBMC con 'plenitud de detalle'.


Escritorio remoto con Raspberry Pi (fácil)

Meiante vnc podemos conectarnos al escritorio remoto de nuestro raspberry pi sin tener que conectar monitor, teclado o ratón

Podemos habilitarlo instalando el paquete thightvnc
sudo apt-get install tightvncserver           


A continuación arrancamos el servidor. Por ser la primera vez se nos pedirá la contraseña para poder conectarnos

tightvncserver

y si queremos crear una contraseña que solo permita visualizar la pantalla sin permiso para poder interactuar. En mi caso digo que no quiero crearla.

Would you like to enter a view-only password (y/n)? n
New 'X' desktop is raspberrypi:1
Creating default startup script .vnc/xstartup
Starting applications specified in .vnc/xstartup
Log file is .vnc/raspberrypi:1.log


Listo, basta con descargarnos nuestro cliente VNC preferido en nuestro pc y conectar con el raspberry pi, solo necesitamos la dirección ip del raspberrypi y el "desktop" que nos ha creado (por ejemplo 192.168.1.51:1)