Nubeox en Linux

En este post explico cómo he conseguido reproducir contenidos de Nubeox Premium protegidos con DRM en Linux.
El mismo método debería servir para otros servicios problemáticos basados en Flash, como Wuaki o TotalChannel aunque no lo he probado.

Como tantas otras veces, el Wiki de Arch Linux ha sido de lo más útil. El problema parece ser que el DRM en Flash requiere HAL. Pero HAL hace años que está en desuso y desaparecido o reducido a la mínima expresión en la mayoría de distribuciones.
La solución pasa por instalar una versión especial de libhal, que internamente usa el sistema más moderno udisks, pero que proporciona los elementos necesarios para que el DRM de Flash funcione.
Se puede encontrar en https://github.com/cshorler/hal-flash, y una vez descargada habrá que compilarla y reemplazar el libhal del sistema si es que aún sigue ahí. Ojo, otros programas que aún dependan de HAL podrían tener problemas. Por suerte en mi caso (Debian Sid) libhal ya no era necesario.

En sistemas basados en Debian (Ubuntu, Mint…) se puede crear el paquete deb fácilmente:

$ sudo apt-get install devscripts build-essential
$ unzip hal-flash-master.zip
$ cd hal-flash-master
$ debuild -us -uc -b
$ sudo apt-get remove libhal1
$ dpkg -i ../libhal1-flash_*.deb

Además hay que eliminar la caché del plugin Flash:

$ cd ~/.adobe/Flash_Player
$ rm -rf NativeCache AssetCache APSPrivateData2

Tras seguir estos pasos, la reproducción de contenidos de Nubeox empezó a funcionar, tanto los canales en directo como las películas y episodios de series. No he probado los alquileres aunque imagino que funcionarán.

Referencias:

Pipelight: Silverlight en Linux

¡Por fin! Una solución para poder usar sitios que requieren Silverlight en Linux sin problema (en la mayoría de casos, al menos).

Hace tiempo que Moonlight está abandonado, muerto y enterrado. Moonlight era el engendro de Novell y Microsoft que implementaba Silverlight (pero no todo) en Linux, y que nunca fué una solución demasiado buena. Microsoft como casi siempre no tiene ningún interés en soportar Linux (aún gracias que soportan Mac OS X, aunque sea por poder decir que .NET y Silverlight son multiplataforma).

Reproductor de video sobre Pipelight

Pipelight en acción

Parece que desde hace algunos meses tenemos otra solución viable: Pipelight. No es una solución bonita, pero permite tener un "plugin Silverlight" oficial en el navegador estándar que queramos usar y funciona, que no es poco.
Tras el telón usa Wine y unos cuantos hacks para poder correr el plugin para Windows. Funciona tanto en x86 como en amd64 y dentro de lo que cabe no es demasiado difícil de instalar, hasta proporcionan paquetes binarios para multitud de distribuciones.

Como comparación, la versión "usable" de Moonlight que tenía instalada corría el test Balls Animation entre 30 y 60 fps mientras que pipelight me lo mueve a 200.
La reproducción de video en Yomvi, cuyo cambio de Flash a Silverlight me había desesperado, es bastante fluída.

Las instrucciones de instalación están en inglés, aunque son bastante fáciles y casi todo consiste en ejecutar los comandos que muestran.

Descarga de vídeos Flash, Parte 3: El formato F4F

Y continuando con la serie, tenemos un nuevo formato que, de nuevo, viene a complicarnos la vida, aunque como de costumbre hay formas de descargarlo: El (relativamente) nuevo formato de Adobe "HTTP Dynamic Streaming" (o F4F). A día de hoy este formato lo utiliza, por ejemplo, La Sexta en sus programas completos.

La mayor complicación de este formato es que los vídeos vienen en múltiples fragmentos pequeños, y unirlos tiene su truco. Por suerte un tal KSV ha preparado un script que permite automatizar el proceso de descarga y unión de fragmentos. El script está escrito en PHP por lo que debería funcionar en cualquier sistema operativo, una vez instalado el intérprete de PHP.

En el caso que he probado, la descarga no puede ser más fácil: hay que obtener la URL del "manifiesto" (un archivo que indica qué archivos hay que descargar) y ya está.
Una forma fácil de obtener esta URL (aunque un pelín complicada de explicar) es abrir Firefox, presionar CTRL+SHIFT+K para desplegar la consola y asegurarse que "Net" está marcado, cargar la pagina del vídeo y darle al "play". En la consola introducimos ".f4m" en el campo Filtro y deberíamos obtener la URL indicada, haciendo click en la URL se abrirá una ventana, donde la linea Request URL (o URL de la petición) es la que nos interesa.

Por ejemplo, si obtenemos:
Request URL: http://servicio.ejemplo.com/v/programa/hd/ABCDEF.mp4/manifest.f4m?c=ABCDEF, deberemos ejecutar el script con:

$ php AdobeHDS.php --manifest "http://servicio.ejemplo.com/v/programa/hd/ABCDEF.mp4/manifest.f4m?c=ABCDEF"

con lo cual se descargarán y unirán los fragmentos, creando un archivo con extensión .flv. Los fragmentos individuales no se borrarán automáticamente.
No lo he comprobado pero dependiendo del servidor es posible que tengas que pasar también el argumento --auth {VALOR}, donde {VALOR} se obtiene de forma parecida a como con el manifiesto pero filtrando con "Seg".

Se puede obtener el script AdobeHDS.php en https://raw.github.com/K-S-V/Scripts/master/AdobeHDS.php
 (y otros scripts del mismo autor en https://github.com/K-S-V/Scripts)


Fuente: http://stream-recorder.com/forum/adobe-hds-downloader-t12074.html

Descarga de vídeos Flash, Parte 2: rtmpsuck

Los métodos que comentaba en la primera parte no siempre funcionan, principalmente porque últimamente han proliferado las webs en que el archivo no se descarga por métodos tradicionales y por lo tanto no se encuentra donde siempre. Éstas webs usan el protocolo RTMP, diseñado precisamente para dificultar que nos guardemos el vídeo. Sin embargo no es imposible, sólo más complicado.
Webs como las de las televisiones a menudo usan RTMP. Este método lo he probado con La Sexta y funciona sin problema.

Usaremos rtmpsuck. El método explicado aquí es para Linux. rtmpsuck también funciona en Windows aunque el método es algo más complicado.

Este método consiste en hacer pasar todo el tráfico RTMP (el protocolo usado con esos vídeos Flash que en teoría no se pueden descargar) por el programa rtmpsuck, que actuará de proxy y guardará los vídeos al mismo tiempo que se reproducen.

Paso 1. Descarga rtmpdump. En muchas distribuciones ya está incluido así que primero prueba con el método estándar:

# apt-get install rtmpdump
o
# yum install rtmpdump

Si necesitases bajar el código fuente y compilar, usa
$ make SYS=posix
una vez descomprimido

Paso 2. Crea un nuevo usuario. Usaremos este usuario para interceptar el tráfico RTMP.

# adduser rtmpsucker
o gráficamente, en GNOME, Sistema > Administración > Usuarios y grupos

Paso 3. Re-asigna todo el tráfico RTMP a este usuario:

# iptables -t nat -A OUTPUT -p tcp --dport 1935 -m owner  ! --uid-owner rtmpsucker  -j REDIRECT

Paso 4. Usa rtmpsuck con el nuevo usuario

# su rtmpsucker
# /usr/sbin/rtmpsuck

Esto crea un proxy que interceptará el tráfico RTMP, te permitirá ver los vídeos con normalidad pero al mismo tiempo los guardará en el disco. Usa CTRL+C para cancelar rtmpsuck cuando ya no lo necesites.

Paso 5. Abre el vídeo normalmente con el navegador.

rtmpsuck lo guardará al mismo tiempo que lo reproduces.

El programa acelerará la descarga del vídeo, descargándolo más rápido que el navegador, aunque cuando lo he probado, si pausaba la reproducción en el navegador se paraba la descarga.

Según los casos puede ser que tengas que volver a lanzar rtmpsuck para diferentes vídeos. Si éste es el caso y antes del vídeo que te interesa te ponen publicidad, lo mejor es lanzarlo mientras se reproduce la publicidad, así no la capturará pero sí el vídeo.


Fuente: http://stream-recorder.com/forum/showthread.php?t=7070

Descarga de vídeos Flash, Parte 1

Para guardar un vídeo flash, de una de esas webs estilo Youtube que se han multiplicado como conejos, una forma muy fácil y que ha funcionado durante mucho tiempo es buscar el video entre los archivos temporales y/o la caché del navegador, dependiendo de la versión de Flash instalada.
Sin embargo en Linux, con las últimas versiones, el vídeo no se encuentra en ninguno de los dos sitios.

El truco: el archivo sí que se guarda en el directorio temporal, pero se borra una vez abierto. Es una de las características de Linux: un archivo abierto puede ser borrado "virtualmente", a todos los efectos parecerá que se ha borrado pero mientras siga abierto se podrá acceder a él normalmente; cuando se cierre, el archivo se borrará de verdad.

Es una forma de crear archivos temporales auto destructibles, que se borran una vez se cierra el programa que los está usando.
El plugin de Flash usa este método, lo cual hace parecer que el archivo de vídeo que se está reproduciendo no está disponible en el disco duro. Sin embargo no es así.

Linux proporciona un método para acceder a los archivos abiertos por un proceso, lo cual nos permite hacer una copia antes de cerrar el reproductor: el sistema de archivos /proc.
Dentro de /proc hay un directorio para cada proceso, y dentro de cada uno de ellos hay un directorio que contiene enlaces a todos los archivos abiertos por el proceso. Podemos usar esos enlaces para acceder a los archivos sin problema.

El proceso es simple, primero reproducimos el vídeo en navegador, es importante no cerrar la página del vídeo y en algunos casos interesa no acabar la reproducción. En la mayoría de reproductores Flash una barra de otro color nos indicará cuánto del vídeo se ha descargado, por lo tanto bastará con reproducir hasta que se llene la barra y luego pausar el vídeo. A continuación buscaremos el enlace en /proc:

Paso 1. Obtenemos el identificador de proceso. En la mayoría de navegadores deberemos buscar el proceso del navegador. Si usamos Google Chrome (o Chromium) deberemos buscar el proceso del plugin flash ya que son procesos separados:

$ pidof firefox-bin # Firefox
4725

En este caso el identificador es 4725

$ ps -ef | grep libflashplayer # Google Chrome
toni  18393 12796 0 17:55 pts/0 00:05:28 /opt/google/chrome/chrome --type=plugin --plugin-path=/usr/lib/flashplayer-square/libflashplayer_square.so --lang=ca --plugin-data-dir=/home/toni/.config/google-chrome/Default --channel=16248.0x6d16e00.377218180

En este caso el identificador es 18393

Paso 2. Accedemos a la lista de archivos abiertos por firefox. La lista será larga pero encontrar los vídeos Flash es fácil porque todos se llaman "FlashXXXXXXXX" donde las X son letras al azar
$ cd /proc/4725/fd
$ ls -l | grep Flash........
lrwx------ 1 toni toni 64 29 mar 17:48 77 -> /tmp/FlashXXUR50Bl (deleted)

Es decir, el archivo "77" (/proc/4725/fd/77) enlaza con un video borrado del disco. Ahora podemos copiar ese archivo. Copiar, ya que es un enlace blando no podemos ni moverlo ni enlazarlo. Por eso es importante haber dejado que se llene la barra (que se descargue por completo), ya que al copiarlo sólo copiaremos la parte descargada hasta ese momento.

$ cp 77 ~/video.flv

Si hemos dejado descargar el archivo por completo tendremos una copia del vídeo 🙂


En la segunda parte, descarga de vídeos sólo en streaming (protocolo rtmp).

La TDT en el futuro próximo

El despliegue de la TDT ha sido hasta ahora, cuanto menos, opaco y es difícil saber qué falta por completar y qué pasará con temas como la emisión en HD.

Por eso quiero compartir esta web que encontré hace poco y que trae bastantes detalles de interés: Televisión Digital Terrestre [http://televisiondigitalterrestre.wordpress.com].

Ejemplo: Reorganización de los canales existentes en el 2011 (aunque está sin actualizar porque ahora Telecinco tiene ocho canales, incluyendo los de Cuatro).

Reparto de múltiples en la fase 2

Fuente: La TDT en 2010 [http://televisiondigitalterrestre.wordpress.com/acerca-de/], mundoplus.tv
Imagen: josezkaos en mundoplus.tv

Valor de retorno en el prompt

Este código sirve para indicar si el último comando ha tenido éxito o no, de manera que siempre esté visible en el propio prompt, es ideal para depurar código entre otras cosas.

Versión rápida (aunque no muy legible :P):
export PS1='$( [ "$?" -eq 0 ] && M=")" || M="("; echo -n :$M ) '$PS1

Incluyendo este fragmento en ~/.bashrc siempre estará activo:

# Indicacion de si el ultimo comando ha tenido exito
#    inspirada por http://mendel.livejournal.com/128965.html
#export PS1='`test "$?" -eq 0 && echo -n ":)" || echo -n ":(" ` '$PS1
# Version con funcion sacada de http://linuxgazette.net/122/lg_tips.html
#Alternativamente: "More-or-less undocumented Bash-ism - a C-style trinary operator":
#smiley () { echo -e ":\$(($??50:51))"; }
_smiley() {
   if [ $? -eq 0 ]; then echo ':)'
      else echo ':('
   fi
}
#...
export PS1='$(_smiley) '$PS1

Ejemplo:

:) toni@host:~$ false
:( toni@host:~$ true
:) toni@host:~$ 

Revisado y corregido por última vez el 2013-10-22

El final de las vacaciones

Castellano

El final de las vacaciones

Bien, doy por terminadas las vacaciones :(

Han sido unas vacaciones interesantes: una semana antes de salir de viaje, por primera vez fuera de España, me encuentro con que mi cámara digital, estropeada desde hacía tiempo, está lo bastante jodida como para que no valga la pena arreglarla, y por lo tanto toca comprar una nueva; no me voy a ir de vacaciones sin cámara. Genial.
Los pocos euros que había podido ahorrar para la futura PlayStation 3 vuelan y yo me quedo jodido por tener que gastarme la pasta de forma tan tonta.
Visto en perspectiva, o mejor dicho, sabiendo lo que sé ahora, que la PS3 se retrasará, y bien, para Europa (ni más ni menos que desde noviembre hasta marzo) resulta que no me pierdo nada. Pero claro, la noticia no es, exactamente, satisfactoria. Teniendo en cuenta que la cámara estropeada era de Sony y que solo había funcionado un año, puedo decir que esta gente ha marcado mis vacaciones :D

En cualquier caso, el viaje ha sido bonito, la cámara funciona bastante bien y sin juguete nuevo igual hasta apruebo más :p

Por otro lado he comprobado la parte negativa de hacer turismo con una cámara digital: poner en orden, limpiar/descartar y retocar las fotos que lo necesiten es un montón de trabajo cuando puedes hacer fotos casi sin límite. Lo suficiente pesado como para que aún no sepa como empezar a hacerlo de la mejor manera posible.

Muestra de las fotos del viaje

Praga y Budapest


Català

El final de les vacances

Bé, dono per terminades les vacances :(

Han estat unes vacances interessants: una setmana abans de sortir de viatge, per primera vegada fora d'Espanya, em trobo amb que la meva càmera digital, espatllada des de feia temps, està prou fotuda com per què no surti a compte arreglar-la, i per tant toca comprar-ne una de nova; no m'aniré de viatge sense càmera. Genial.
Els pocs euros que havia pogut estalviar per a la futura PlayStation 3 volen i jo em quedo fotut per haver de gastar-me la pasta de forma tant tonta.
Vist en perspectiva, o millor dit, sabent el què ara sé, que la PS3 s'endarrerirà, i bé, a Europa (ni més ni menys què des de novembre fins al març) resulta que no em perdo res. Però és clar, aquesta noticia no es, exactament, satisfactòria. Tenint en compte que la càmera espatllada era de Sony i que només havia funcionat un any, puc dir que aquesta gent ha marcat les meves vacances :D

En qualsevol cas, el viatge ha estat maco, la càmera funciona prou bé i sense joguina nova potser fins i tot aprovo més :p

D'altra banda he comprovat la part negativa de fer turisme amb una càmera digital: posar en ordre, netejar/descartar i retocar les fotos que ho necessitin és una feinada quan pots fer fotos pràcticament sense límit. Suficient pesat com per que encara no sàpiga com començar a fer-ho de la millor manera possible.

Mostra de les fotos del viatge

Praga i Budapest