domingo, 2 de febrero de 2014

La Renderización y Decodificación de Vídeo H.264: Android, Windows y Ubuntu

Para decodificar (descomprimir) vídeo H.264 (el formato de compresión propietario más extendido) la CPU ha de trabajar mucho a no ser que tengamos decodificación y renderizado por hardware. Sobretodo en videos HD (720p) y FullHD (1080p). 

La mayoría de SOCs (placas) modernas para Android 4, proveen decodificación de vídeo H.264 por hardware. Las versiones actuales de Mozilla Firefox, Adobe Flash Player y YouTube para Android, soportan decodificación de vídeo H.264, usando los recursos hardware que ofrecen los SOCs Android. En el caso de la aplicación YouTube, si tenemos una pantalla con 720p o más, la reproducción de videos se realiza en HD, se puede activar o desactivar, en el menu de la aplicación. Si nuestra pantalla es de menos de 720p, la reproducción se realiza en HQ (máx. 480p)

Tanto Mozilla Firefox 26, cómo Adobe Flash Player para Windows soportan decodificación y renderizado de vídeo H.264 en HTML5. A partir de Windows 7 con DirectX Video Acceleration (DXVA) 2.0, que es parte del sistema operativo, la decodificación y el renderizado se hace por Hardware, con tarjetas a partir de (1).

Cómo vemos tanto en Android 4 cómo a partir de Windows 7, la decodificación y renderizado de vídeo en H.264, funciona "out of the box". En el caso de Ubuntu, cómo se muestra a continuación, se ha de configurar a mano.

Tanto Mozilla Firefox 26, cómo Adobe Flash Player 11.2.202.305 (el último player de Flash que Adobe hará para Firefox) para Ubuntu soportan decodificación y renderizado de video H.264. Para decodificar y renderizar por hardware, además se necesitan: GStreamer, las Video Acceleration API (VA API), y con targetas de video NVIDIA e Intel HD Graphics, se necesitan las VDPAU (Video Decode y Presentación de API para Unix).

Veamos como se haría para el caso de Intel HD Graphics:

1. Instalar las VAAPI (para Intel HD Graphics y también para G45 y siguientes):
sudo apt-get install i965-va-driver

2. Instalar libvdpau-va-gl usando el WebUpd8 PPA:
sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install libvdpau-va-gl1

3. Adobe Flash Player no usa aceleración por hardware por defecto, para la decodificación de video H.264, por tanto hay que forzarlo:
sudo mkdir -p /etc/adobe
echo "EnableLinuxHWVideoDecode=1" | sudo tee /etc/adobe/mms.cfg
echo "OverrideGPUValidation=1" | sudo tee -a /etc/adobe/mms.cfg

Ahora arrancar Firefox desde Terminal, con VDPAU_DRIVER=va_gl firefox.

La decodificación de video H.264 por hardware, en Ubuntu, aún no funciona bien para algunas targetas Intel HD Graphics, ni para algunas NVIDIA. Esto provoca también que Adobe Flash Player falle o no muestre bien el vídeo en cuestión. Si este es el caso, es mejor no forzar, mediante los comandos anteriores, la decodifación por hardware.

Chrome Versión 32.0.1700.102 no acepta por el momento decodificación por hardware de video H.264, ni en Linux, ni en MAC OS. Recordemos que Chrome lleva una versión más reciente de Adobe Flash integrado dentro del navegador.

Para targetas NVIDIA y AMD Radeon, el proceso es muy similar.

Se puede solicitar usar el reproductor de vídeo de HTML5 en YouTube, en lugar del Flash player de Adobe.

Pero el reproductor de vídeo HTML5, no acepta los anuncios que YouTube inserta en los vídeos, por lo tanto muchos vídeos se mostrarán obligatoriamente en Flash.

Para forzar a que YouTube siempre muestre los vídeos con el reproductor de HTML5, se puede hacer usando el complemento de Firefox Greasemonkey y el script.

De todas formas actualmente, YouTube solo ofrece HD a 720p con el reproductor de HTML5.

Firefox es un navegador de código abierto. Todo lo anterior, es válido igualmente, para conseguir decodificar y renderizar por hardware, vídeos H.264, con el reproductor de código abierto VLC Player.


 (1)AMD: Radeon HD 6xxx y posteriores
     Nvidia: Nvidia GeForce 500 Series y posteriores
     Intel: Intel HD Graphics 2000 y posteriores

No hay comentarios: