KEMBAR78
Blog de Iván López: HTPC
Mostrando entradas con la etiqueta HTPC. Mostrar todas las entradas
Mostrando entradas con la etiqueta HTPC. Mostrar todas las entradas

domingo, 1 de agosto de 2010

Acelerando video en alta definición H.264 por hardware en Ubuntu 10.04 con ATI

   Desde que monté el HTPC una de las cosas que siempre quise hacer fue acelerar por hardware los vídeos H.264. Todas las series que descargo (que son bastantes) intento que estén siempre en 720p puesto que además de la calidad adicional respecto al divx estándar, también viene con sonido 5.1, por lo que la sensación final es mucho mejor.
   Así, quería poder acelerar el video sin tener que tirar de cpu. Cuando tenía instalado windows xp en el HTPC lo intenté siguiendo varias guías y tutoriales y también con distintos programas, pero al final no fui capaz de conseguirlo. Desde que instalé Ubuntu en el HTPC la cosa ha cambiado. Mi placa base lleva integrada una ATI HD3200, que, aunque es algo modesta y para juegos seguro que se queda corta, permite acelerar vídeos en alta definición. Para ello vamos a utilizar las librerías VAAPI (Video Aceleration API) que son el equivalente para ATI de las famosas VDPAU de NVidia. Además, como no podría ser de otra forma, el reproductor será mplayer. Veamos cómo lo he conseguido.

Instalando el driver propietario de ATI
   Utilizaremos la última versión de los drivers propietarios de ATI para Linux. En Ubuntu 10.04 sólo funcionan los drivers a partir de la versión 10.4. Por suerte, cuando salió la última versión de Ubuntu, en ATI se pusieron las pilas y al día siguiente ya habían liberado los drivers. Parece que por fin nos van teniendo en cuenta a los usuarios de Linux.
   Actualmente la última versión disponible para mi tarjeta es la 10.7. La descargamos, en mi caso la versión de 64 bits, y la instalamos sin mayor complicación con:
$ sudo ./ati-driver-installer-10-7-x86.x86_64.run


Instalando las librerías VAAPI
   Como hemos comentado, para conseguir la aceleración por GPU vamos a usar VAAPI. En la web http://www.splitted-desktop.com/~gbeauchesne/ nos tenemos que bajar las últimas versiones disponibles de: libva, libva-dev, libva-dbg y xvba-video
$ wget http://www.splitted-desktop.com/~gbeauchesne/libva/pkgs/amd64/libva-dev_0.31.1-1+sds4_amd64.deb
$ wget http://www.splitted-desktop.com/~gbeauchesne/libva/pkgs/amd64/libva1-dbg_0.31.1-1+sds4_amd64.deb
$ wget http://www.splitted-desktop.com/~gbeauchesne/libva/pkgs/amd64/libva1_0.31.1-1+sds4_amd64.deb
$ wget http://www.splitted-desktop.com/~gbeauchesne/xvba-video/xvba-video_0.7.2-1_amd64.deb
Instalamos los paquetes que acabamos de descargar:
$ sudo dpkg -i libva* xvba-video_0.7.2-1_amd64.deb


Compilando mplayer con soporte VAAPI
   Aunque no es estrictamente necesario, sí es recomendable instalar primero la versión existente en los repositorios de Ubuntu. Así, el sistema sabrá que está instalado y nos permitirá instalar complementos como la interfaz gráfica SMPlayer.
   Antes de poder compilar mplayer tendremos que descargar todas las librerías y paquetes xxxx-dev necesarios. Para ello ejecutamos lo siguiente. En mi caso se descargaron 112 paquetes, pero esto puede variar de un sistema a otro en función de lo que tengamos instalado previamente.
$ sudo apt-get build-dep mplayer
   Aunque la compilación de mplayer puede parecer algo complejo, realmente es muy sencilla. Lo que realmente nos vamos a descargar es un script y unos parches para mplayer. Descargamos la última versión disponible en http://www.splitted-desktop.com/~gbeauchesne/mplayer-vaapi/.
$ wget http://www.splitted-desktop.com/~gbeauchesne/mplayer-vaapi/mplayer-vaapi-20100713.tar.bz2

$ bunzip2 mplayer-vaapi-20100713.tar.bz2
$ tar xvf mplayer-vaapi-20100713.tar
mplayer-vaapi-20100713/
mplayer-vaapi-20100713/patches/
mplayer-vaapi-20100713/patches/mplayer-vaapi-gma500-workaround.patch
mplayer-vaapi-20100713/patches/mplayer-vdpau.patch
mplayer-vaapi-20100713/patches/mplayer-vaapi.patch
mplayer-vaapi-20100713/patches/mplayer-vaapi-0.29.patch
mplayer-vaapi-20100713/checkout-patch-build.sh
mplayer-vaapi-20100713/README.txt
mplayer-vaapi-20100713/NEWS
   Ejecutamos el script que se encarga de todo. Descarga de los subversions las versiones adecuadas de mplayer, ffmpeg y dvdnav, las parchea y finalmente las compila. Si hemos ejecutado todos los pasos anteriores deberíamos tener todas las dependencias satifeschas y la compilación no debería fallar. Esperamos a que termine ya que tardará más o menos en función de la potencia de la máquina.
$ ./checkout-patch-build.sh
Ahora tendremos un directorio llamado mplayer-vaapi en el que estará disponible nuestra propia versión de mplayer.


Probando a vídeos con aceleración y sin ella
   Para hacer la prueba voy a utilizar un capítulo de Lost en 720p. Primero vamos a hacer una prueba sin acelerar ejecutando simplemente:
$ ./mplayer Lost.S06E01-02.720p.mkv
...
VIDEO: [H264] 1280x720 0bpp 24.000 fps 0.0 kbps ( 0.0 kbyte/s)
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
Starting playback...
Movie-Aspect is 1.78:1 - prescaling to correct movie aspect.
VO: [xv] 1280x720 => 1280x720 Planar YV12
   Si ahora hacemos lo mismo pero utilizamos VAAPI vemos en la salida de mplayer que estamos usando las librerías para la aceleración.
$ ./mplayer -vo vaapi -va vaapi Lost.S06E01-02.720p.mkv
...
VIDEO: [H264] 1280x720 0bpp 24.000 fps 0.0 kbps ( 0.0 kbyte/s)
libva: libva version 0.31.1-sds1
Xlib: extension "XFree86-DRI" missing on display ":0.0".
libva: va_getDriverName() returns 0
libva: Trying to open /usr/lib/va/drivers/fglrx_drv_video.so
libva: va_openDriver() returns 0
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
[VD_FFMPEG] VA API accelerated codec.
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
VO: [vaapi] 1280x720 => 1280x720 H.264 VA-API Acceleration
[VD_FFMPEG] XVMC-accelerated MPEG-2.
   Para que se vea de una manera más gráfica la diferencia de consumo de CPU, con el comando pidstat tomé muestras del consumo de mplayer en ambos casos.

   Como vemos la diferencia en ambos casos del uso de CPU es brutal, algo esperado porque quien realmente está decodificando el vídeo en el caso de VAAPI es la GPU.

   Finalmente, copiamos mplayer a su ubicación definitiva para poder ejecutarlo desde cualquier sitio. Con esto reemplazaremos los binarios que instalamos desde los repositorios.
$ sudo make install
install -d /usr/local/bin /usr/local/etc/mplayer /usr/local/lib
install -m 755 -s mencoder /usr/local/bin
install -d /usr/local/share/man/man1
install -m 644 DOCS/man/en/mplayer.1 /usr/local/share/man/man1/
cd /usr/local/share/man/man1 && ln -sf mplayer.1 mencoder.1
install -m 755 -s mplayer /usr/local/bin


Automatizando los parámetros de mplayer
   Ahora ya sabemos cómo acelerar los vídeos por hardware pero es una tarea un poco pesada tener que pasar todos los parámetros de mplayer para cada vídeo. Además, en mi caso, no estoy utilizando la salida de audio mini-jack de la placa base, sino que uso la salida óptica S/PDIF. Para conseguir que mplayer saque el audio por ese conector, también debemos indicárselo.
   Mostramos un listado de los dispositivos hardware capaces de reproducir audio para ver cual es que nos interesa.
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: SB [HDA ATI SB], device 0: ALC889A Analog [ALC889A Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: SB [HDA ATI SB], device 1: ALC889A Digital [ALC889A Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: HDMI [HDA ATI HDMI], device 3: ATI HDMI [ATI HDMI]
Subdevices: 1/1
Subdevice #0: subdevice #0
   Así, debemos ejecutar mplayer indicando la tarjeta y el dispositivo que queremos utilizar para sacar el audio. Adicionalmente también le forzamos el audio AC3:
$ mplayer -ao alsa:device=hw=0.1 -ac hwac3 -vo vaapi -va vaapi pelicula.mvk
   Si hubiera querido que el audio saliera directamente por el conector HDMI que va a la tele, las opciones que tendría que haber puesto en mplayer serían: -ao alsa:device=hw=1.3
   Esto cada vez crece más. Si antes teníamos que poner las opciones para el soporte vaapi, ahora adicionalmente tenemos que poner también la salida por S/PDIF. Para nuestra comodidad podemos añadir todas estas opciones al archivo de configuración de mplayer.
$ cat /home/ivan/.mplayer/config
# Write your default config options here!
# Salida por S/PDIF
ao=alsa:device=hw=0.1,
# Forzar audio a AC3
ac=hwac3
# Aceleración HW
vo=vaapi
va=vaapi
   De esta sólo tenemos que ejecutar
$ mplayer pelicula.mkv
y tendremos la salida de audio por S/PDIF y la aceleración por hardware habilitada.


¿Y por qué no usar VLC?
   Hace un par de semanas se ha liberado la versión 1.1.1 de VLC con soporte VAAPI. Si queréis instalarlo podéis seguir estas instrucciones. Simplemente consiste en añadir un nuevo repositorio e instalar VLC desde él. Aún así esta versión no está compilada con soporte VAAPI. También nos podemos descargar una versión con el soporte vaapi habilitado, pero según podemos leer en el enlace anterior, se "romperán" el resto de reproductores de video y paquetes que utilicen la versión de ffmpeg de los repositorios de Ubuntu. La única solución sería recompilarlos todos contra la nuevas versión de ffmpeg.
Now, regarding vaapi (GPU acceleration): you basically can't compile VLC 1.1.0 with vaapi support without breaking stuff. To get it to work with vaapi, it would need newer ffmpeg packages which would mean every package using the ffmpeg packages in the Ubuntu official repository would be broken unless it is compiled against the same ffmpeg package (so you would need to either compile every package that uses ffmpeg yourself or a PPA should package all these packages - which is practically impossible).

There is a PPA which packages VLC 1.1.0 with vaapi support as well as fixed mplayer to work with the new ffmpeg/gstreamer. But since this PPA only has VLC and mplayer, it means that other video players / video editors will stop working if you use the following PPA and for this reason I won't post instructions for installing it here. You can however find both the PPA and exact instructions for installing VLC 1.1.0 with vaapi support, HERE. Remember: using it, a lot of applications will be broken! Also, the VLC package in the Cutting Edge Multimedia PPA (not the C-Korn PPA we posted in the begining of the post - that's stable and doesn't break anything!) doesn't yet have the latest VLC 1.1.0 but a GIT version dating back to June 16 - that's still very close to the final version.
   Así que nada. Tendremos que esperar a que se actualicen todos los programas de los repos antes de poder probar la aceleración hardware con VLC.


Conclusiones
   Sabía que acelerar los vídeos por GPU iba a suponer que la CPU prácticamente estuviera descansando, aún así el resultado me ha sorprendido gratamente. Además, por fin parece que ATI proporciona unos drivers que funcionan en Linux. Son propietarios y cerrados y sería estupendo que fueran libres, pero al menos, los que decidimos apostar por ATI y Linux no nos sentimos abandonados como hace unos años cuando ATI en Linux era sinónimo de problemas y quebraderos de cabeza. Aún recuerdo cuando monté mi ordenador "de sobremesa" hace ya más de tres años, que elegí una NVidia sin dudarlo por la multitud de problemas que había con ATI en Linux. En fin, los tiempos cambian, por fortuna a mejor, para los usuarios de Linux :-).

jueves, 1 de julio de 2010

Ubuntu en el HTPC. ¡Ahora sí!

   Hace prácticamente un año que escribí el artículo HTPC para el salón. En él comentaba que había montado un HTPC y que le había instalado Windows XP, pero que había dejado una partición para Linux. Además, probé un live-cd de Ubuntu pero no me llegó a ir del todo bien y al final lo fui dejando pasar.

   Resulta, que como siempre pasa en Windows con el paso del tiempo, el sistema se va degradando y deja de funcionar. Es algo que me extrañó porque en el HTPC no instalaba nada, sólo lo mínimo imprescindible para funcionar y para que el ordenador arrancase rápido. Aún así, hace unos 3-4 meses empezó a resetearse de vez en cuando sin motivo aparente. Así que cogí un live-cd de Ubuntu 9.10, lo instalé y me puse a configurarlo. Después de pegarme bastante, al final logré dejar todo funcionando, incluso sacando el audio por la salida óptica enganchada al ampli en 5.1 :-D. Luego, después de que saliera Ubuntu 10.04, formatee, instalé todo de cero y configuré de nuevo (esta vez fue todo más rápido y sencillo).

    Después de llevar utilizando Ubuntu como media center estos últimos meses he de decir que no tiene nada que envidiar a Windows. Todos los codecs funcionan, el audio en 5.1 sin problemas e incluso la aceleración de videos en HD, algo que cuando arrancaba con windows nunca fui capaz de conseguir. Pero esto tendrá que esperar a la siguiente entrada...

Actualización: Como dice luischenco en los comentarios, ni siquiera he contado el software que estoy utilizando. La verdad es que no estoy utilizando ninguno!. Me explico. He probado XBMC y Boxee y ninguno me ha terminado de convencer. Sí, son muy bonitos y están muy bien hechos, pero no son para mi. Yo el htpc lo utilizo como "almacen temporal" de pelis y series, no las guardo para siempre, por lo que no necesito tener las carátulas, la sinopsis, la información de los actores,... Como he dicho, es muy chulo, pero nada más. En el htpc no tengo música, ni fotos y nada más, sólo series y pelis (y dibus para Judith), por lo que todo eso no me aporta nada.
El software que utilizo: 3 accesos directos en el escritorio a las pelis, series y dibujos, y luego doble-clic en el archivo que quiero abrir, así de sencillo. Por defecto se abre con VLC y si quiero aceleración hardware lo lanzo con mplayer desde línea de comandos. Así de simple.

miércoles, 29 de julio de 2009

HTPC para el salón

   En casa, tanto mi mujer como yo somos muy aficionados a las series. Desde hace ya varios años no vemos la tele. Por las noches, después de acostar a Judith nos ponemos uno o dos capítulos de alguna de las series que seguimos (que son muchas) y disfrutamos de los contenidos que nos gustan cuando nosotros queremos y sin cortes publicitarios.
   Hace ya algún tiempo que conté cómo tengo configurada la red de casa. Hasta ahora, el proceso que seguía un capítulo era el siguiente, lo descargaba del emule con el portatil que tengo dedicado para ello, luego lo copiaba a mi sobremesa, de ahí lo grababa en dvd's reescribibles y me lo llevaba al reproductor de dvd-divx del salón. Como os podéis imaginar es una tarea muy pesada y en muchas ocasiones, grababa unos cuantos capítulos, pero justo algun otro que no había grabado era el que le apetecía ver a mi mujer :-P.

   Así, después de mirar y convencer a mi mujer me decidí a montar un HTPC. Lo primero que tengo que aclarar es que el equipo lo monté a finales de enero (pero lo he ido dejando y hasta ahora no he sacado hueco para el post), por lo que ahora mismo puede que hubiera elegido otras opciones que no estaban disponibles hace 6 meses. Veamos lo que elegí:

  • Micro AMD Athlon 64 4850e: Aunque soy más de intel, en esta ocasión he elegido AMD. En concreto ese micro porque es especial para htpcs ya que sólo disipa 45W, por lo que podremos tenerlo fresquito sin muchos ventiladores.

  • Placa base Gigabyte MA78GM-DS2H: Esta placa estaba en casi todas las configuraciones de htpc que leía en los foros. Es una placa muy completa y tiene las salidas que yo estaba buscando: HDMI para conectarla a la tele y salida digital de audio para conectarla al amplificador. Además lleva la tarjeta gráfica integrada (ATI HD3200) que permite aceleración de contenido en alta definición por hardware.


  • Memoria: 2 GB en dos módulos Kingston. Para el uso que le voy a dar al htpc no necesitaba 4.

  • Disco duro: Seagate de 640 GB. Creo que los hay más silenciosos, pero en mi caso no lo aprecio y éste estaba a buen precio. Por cierto, ya lo tengo casi lleno :-P

  • Fuente de alimentación Tacens Radix II de 420W totalmente modular, así sólo conecto los cables de alimentación que necesito.

  • Caja SilverStone Grandia GD02B: Con la caja tuve un problema y es que mi mueble sólo tiene 40 centímetros de profundidad, por lo que la mayoría de las cajas del mercado no me servían. Al final me quedé con esta aunque me subió un poco de precio, pero no tenía muchas más alternativas. Al menos la caja cuesta lo que vale: es toda de aluminio, con un tacto muy agradable y unos acabados de gran calidad. Además tiene esos "pequeños" detalles que la hacen una gran caja como las gomas en los agujeros del disco duro para absorber las vibraciones y que haya el menor ruido posible.


  • Grabadora de DVD: Aunque no utilizo mucho el dvd porque todo es contenido descargado, sí que viene bien en ocasiones cuando alguien te deja un dvd o para alguna peli de dibujos de Judith (por supuesto copias de seguridad :-P). Elegí la grabadora LG más barata que encontré, no necesitaba nada mejor :-P.

  • Teclado y ratón inalámbricos: Como es algo que se va a utilizar muy poco: para buscar los subtitulos, comenzar la reproducción y poco más, elegí uno de una marca poco conocida pero muy económico. Al día siguiente lo tuve que devolver porque el alcance era nulo. Lo cambié por un pack Logitech Cordless Desktop EX110 que tiene un alcance realmente impresionante: me fui a dos habitaciones de distancia del salón y seguía funcionando!. Además el consumo de pilas es muy bueno. En estos 6 meses las pilas del teclado las he cambiado una vez y las del ratón todavía no.

  • Capturadora de televisión: No he puesto ninguna. El HTPC sustituye en el salón a un video y al reproductor de dvd-divx. Hablando con mi mujer, me preguntó qué hacíamos si queríamos grabar algo de la tele. Mi respuesta fue que llevábamos años (literalmente) sin grabar nada, así que al final nos ahorramos la capturadora.

  •    Y respecto al hardware eso es todo. Como sistema operativo instalé Windows XP y dejé una partición para instalar Linux, aunque para ser sincero todavía no lo he hecho por falta de tiempo. Hace unos meses probé un live-cd de Ubuntu 8.10 y no conseguí sacar el audio en 5.1 por el amplificador. En cuanto pueda pruebo con la versión 9.04 a ver qué tal.
       Como conclusiones finales diré que estamos encantados con el cambio. Sigo descargando todo en el portatil dedicado al emule y por las noches cuando nos ponemos a ver algo lo grabo directamente al disco duro del htpc. Así siempre tenemos disponible todo lo descargado para elegir. Hemos ganado en calidad de vida...

    P.D: Los más observadores se habrán dado cuenta de que en la foto de todos los componentes hay un disipador Scythe Ninja Mini. Lo compré para sustituir al disipador de serie porque pensaba que el htpc estaba muy encajonado y no iba a refrigerar bien. El problema fue que no entraba en la caja y al final lo devolví. Además, he podido comprobar en todo este tiempo que las temperaturas se mantiene en unos márgenes muy razonables.