Las explicaciones del desarrollador de Adobe Flash para Linux y el soporte de video

flash-h264.jpgUn intenso debate se está llevando a cabo en el sitio Phoronix y en el blog de Mike Melanson – desarrollador del plug-in de Adobe Flash para Linux – sobre los problemas que debe sortear para implementar la reproducción de video con un rendimiento aceptable.  Mike inicialmente publicó un breve post en donde culpaba a la falta de estandarización de las API’s de Video en Linux como el motivo para no soportar ningún tipo de aceleración, recibiendo una contundente respuesta de la comunidad, que mostró como ejemplo otras aplicaciones de video que muy por el contrario, se ven beneficiadas por estas API’s.

Para nadie es un misterio que independiente del sistema operativo, reproducir videos con el plug-in de Flash en sitios como YouTube es lento, algo que se nota sobre todo en computadores con procesadores antiguos o al tratar de abrir varias pestañas con videos. Cualquier usuario que intente reproducir un video de YouTube con cualquier otro reproductor de video como por ejemplo Minitube, puede darse cuenta de que los los reproductores nativos consumen muy pocos recursos en comparación al plug-in de Adobe.

Hasta hace poco, se desconocían los motivos por los que el plug-in de Adobe se comportaba tan lento, y aunque Mike partió mal quejándose sin mayor fundamento en su blog, poco a poco se ha ido entendiendo en donde está el problema, y en este artículo intentaremos explicar de qué se trata el asunto.

Las tres etapas

La reproducción de video se puede dividir en tres etapas : decodificación, postproceso y render final.  En la decodificación, se toman los datos comprimidos directamente del archivo o del stream de video para obtener un sólo cuadro o imagen, se puede ver como el acto de tomar unos pocos bytes y convertirlo en un pixmap sin compresión.  El postproceso puede ser la aplicación de filtros (desentrelazado, eliminación de ruido, etc)  o cualquier otra operación que se desee realizar sobre el cuadro obtenido, por ejemplo el dibujado de los subtítulos o un logotipo.  Finalmente el render se encarga de volcar esa imagen final en memoria de video para que quede a la vista del usuario, esto incluye pasar por el sistema gráfico y en el caso de Flash en particular, dibujar el cuadro en un área rectangular de la página web renderizada en un browser.

Mike dice que no se puede comparar el rendimiento del plug-in de Flash con un reproductor de video normal porque se trata de resolver problemas que muy diferentes: En un reproductor de video normal las tres etapas son baratas en términos de uso de recursos porque no hay mayor transformación desde el cuadro obtenido en la primera etapa y el render final, por ejemplo el video decodificado puede ser enviado directamente a render usando aceleración por hardware, a menos que se requiera postproceso y aún así, los reproductores de video pueden usar métodos muy económicos para esta etapa.

200px-Barn-yuv

Componentes YUV de un cuadro - (cc) Wikimedia

El problema principal radica en que Flash Player necesita trabajar sobre imágenes que operan en el espacio de colores RGB, es decir, cada pixel tiene un componente de rojo, verde y azul, mientras que el procesamiento de video usualmente opera en el espacio de colores YUV (o derivado), en donde la representación de los pixeles se realiza con componentes más adecuados a la percepción humana e ideales para la compresión.  Esta diferencia hace que mientras un reproductor de video puede pasar YUV directamente a la tarjeta de video, Flash tiene que convertir el cuadro completo a RGB para recién comenzar el postproceso que incluye el dibujo de otros componentes de Flash.

En la actualidad no hay forma de convertir YUV a RGB a través del hardware de video (GPU) y es una tarea que se hace “por software” en la CPU.

Seguramente Ustedes han visto una opción para habilitar la aceleración de video por hadware en el plug-in de Flash, Mike aclara que esta opción es sólo para el render final y lo que hace es aprovechar la GPU para escalar el cuadro al tamaño definitivo (ver bonus track). Tarea no menos importante, ya puede producir un mundo de diferencia entre reproducir el video en su tamaño original y llevarlo a pantalla completa, aún así la decodificación y conversión YUV->RGB sigue siendo sin ayuda del hardware.

En la versión 10.1 lo que se hizo fue aprovechar la aceleración por hardware para decodificación de video (primera etapa) en Windows:  Se trata de DirectX Video Acceleration o DXVA, y es una API especialmente diseñada para este propósito y que permite a una aplicación usar la aceleración de video provista por el fabricante de hardware, como PureVideo de NVIDIA o Unified Video Decoder de ATI en forma independiente del hardware.

Lo que indicó Mike en su primer post es que en Linux no existía una API de decodificación de video que se pudiera usar en este momento, lo que provocó la ira de usuarios y desarrolladores que conocen de la existencia de VDPAU de NVIDIA y XvBA de ATI, justamente los equivalentes en Linux de PureVideo y Unified Video Decoder respectivamente.  Por otra parte, Intel desarrolló Video Acceleration API (VA-API) para Linux, se trata de un mecanismo independiente del hardware para la decodificación de video, se puede decir que es el equivalente a DXVA de Windows para Linux, y permite usar la aceleración de decodificación de video disponible en algunos chips de Intel, NVIDIA a través de VDPAU, S3 y ATI a través de XvBA.

En la actualidad varios reproductores de video ya están usando estas API’s e incluso la implementación del plugin de Flash libre llamada Gnash, ya puede usar VA-API.

Para Mike esto sólo resolvería la primera etapa (decodificación) pero al menos podría quedar a la par con Windows, y el único sistema que quedaría atrás sería MacOSX, ya que según los desarrolladores de Flash no existe una API que permita obtener el cuadro decodificado tal como lo necesitan.

Aun así, aunque se cuente con decodificación por hardware se mantiene el problema de convertir los cuadros de YUV a RGB lo que hace que muchos se cuestionen qué tan adecuado es Flash para reproducir videos en la web y se enfatice la necesidad de que el famoso tag video de HTML5 tome fuerza y se convierta en un estándar para la publicación de videos.

Bonus Track : Las malas prácticas

Una de los aspectos más criticados del plug-in de Flash en Linux es que no soporta ningún tipo de aceleración y que los videos a pantalla completa pueden llegar a consumir gran parte del poder del procesador.  La verdad es que Flash en Linux sí usa aceleración en la tercera etapa de render y lo hace a través de OpenGL, y también hay que decir que está mal implementado.

La idea es sencilla: El cuadro listo para ser renderizado se convierte en una textura y a través de OpenGL se le pide al chip de video que ajuste esta textura al tamaño que se necesita. Considerando que el hardware de video es especialista en transformar texturas, se trata de una operación que no le hace ni cosquillas al computador.

El problema es que Mike, quien parece ser el único desarrollador de este plug-in, no encontró una forma confiable de detectar el hardware, y en sus pruebas se encontró con que algunos drivers de video tenían problemas si se trataba de llamar a la funcionalidad requerida y ésta no se encontraba soportada.  Por lo que simplemente se limitó a buscar el valor del el atributo “client glx vendor string” que arroja el comando glxinfo (glxinfo | grep client), y si este decía SGI entonces deshabilitaba la aceleración con OpenGL.

El problema es que salvo los drivers de NVIDIA, todos los demás dicen SGI porque usan una biblioteca común y no tiene nada que ver con las capacidades del hardware.  Ian Romanick, un representante de Intel en Architecure Review Board de OpenGL lo fustigó por esta mala práctica:

Como uno de los representantes de Intel en el ARB de OpenGL, estoy horrorizado por este mal uso del atributo client de GLX. Este atributo no tiene ninguna información sobre la existencia o la calidad del render por hardware.  Está orientado para propósitos de depuración y usarlo para cualquier otra cosa está completa e innegablemente equivocado.  Por favor corrige este bug.

Mike respondió que fue el único método confiable de detección que pudo encontrar y nuevamente Ian de Intel respondió:

Si encuentras que una interfaz debería funcionar pero no funciona, por favor, reporta el bug.  No te conformes usando interfaces que no fueron diseñadas para eso o que funcionan en formas no documentadas.  Sé que es la forma estándar de hacer estas cosas en Windows.  Nosotros preferimos corregir nuestros bugs cuando los conocemos, para que no tengas que hacer ese tipo de cosas aquí.  El hecho de que el “método más confiable de detección” sea confiable sólo en el driver de código cerrado de NVIDIA, es una clara evidencia de que no es confiable.

No es claro si este bug está o no corregido, pero al menos se incluyó un mecanismo para hacer que Flash no intente detectar el soporte de hardware por esta vía, para que el usuario avanzado habilite la aceleración por hardware explícitamente.

Conclusiones

De este debate se puede sacar una conclusión muy clara: Si el desarrollo del plug-in de Flash fuera abierto, por muy experto que sea Mike, podría haber recibido ayuda de otros expertos en video para Linux y también de fabricantes de hardware para implementar todo lo necesario con tal de habilitar la decodificación de video y además hubiera evitado el problema de la detección del hardware por medios no confiables, y que afectó a muchos usuarios.  De hecho le proponen implementar la conversión a RGB que necesita Flash en los mismos drivers, porque hay hardware que lo soporta, lo que mejoraría el rendimiento del plug-in notablemente.

Se agradece que Mike haya compartido estos detalles que podrían ayudar a obtener más luces sobre el asunto, pero si trabajara más cercano a la comunidad de código abierto y los fabricantes de hardware, hace mucho tiempo que la experiencia de Flash en Linux podría haber mejorado.

Link: Solving different problems (Penguin.SWF)

Acerca del Autor
Franco Catrin Ingeniero Informático de profesión y músico de afición, no es poco el código que ha escrito con metal progresivo de inspiración. Se apasiona leyendo, escribiendo y también discutiendo. Para él, aprender es un desafío diario así como también enseñar, aunque sea a través de un Bonus Track.

Compartir Compartir
Publicado por Franco Catrin el 29 de January 2010 en la categoría Destacados, Hardware, Software con los tags , , , , , , . Tiene 85 comentarios.

85 Comentarios

Las explicaciones del desarrollador de Adobe Flash para Linux y el soporte de video

Deja tu Comentario ↓
CaReCoiN

DesaprobarAprobar30CaReCoiN dijo el 29-1-2010 a las 01:24:

1

Lo del consumo de procesador en videos Flash da para pensar que existen alternativas mejores para todo el factor rendimiento final, tales como el mismo HTML5. Ahora sólo queda esperar que las páginas web populares y los exploradores web masifiquen esta iniciativa, porque de que es viable, lo es.

Ver Comentario... Guatón Campero dijo el 29-1-2010 a las 01:24 ...

Nico

DesaprobarAprobar101Nico dijo el 29-1-2010 a las 01:31:

3

Da gusto entrar a AppleWayer cuando Franco escribe. Sus artículos técnicos están muy bien escritos, perfectamente argumentados y, por sobre todo, uno aprende mucho con ellos.

Muchas gracias, sin tí, esta página sólo sería publicidad de apple.

Manuel

DesaprobarAprobar30Manuel dijo el 29-1-2010 a las 01:35:

4

Claramente se ve como un sistema de codigo abierto ofrece muchas mas ventajas en el desarrollo de software que hacerlo a la “vieja escuela”, lo que nos falta es que las tecnologias que hay en internet sean abiertas para que no existan problemas como estos. El debate sobre usar h.264 sobre theora por que es un “poco” mejor no se compara con las dificultades que se pueden tener despues por ser codigo cerrado, ademas theora mejora notablemente y puede que sobrepase a h.264 en no mucho tiempo :D , Apoyemos la libertad de internet!!

fuelforfire

DesaprobarAprobar8fuelforfire dijo el 29-1-2010 a las 01:35:

5

Sencillamente impresentables las explicaciones del desarrollador, en vista de los antecedentes expuestos por la comunidad.

Ojalá podamos tener buenas noticias sobre el desarrollo, en un mediano plazo :D

kokol

DesaprobarAprobar83kokol dijo el 29-1-2010 a las 01:38:

6

FrancoWayer
Dosis diarias de verdadera tecnologia en geek.

click-me

DesaprobarAprobar17click-me dijo el 29-1-2010 a las 01:41:

7

Excelente articulo, y si, da rabia como flash puede seguir siendo el dueño de internet en cuanto a multimedia se trata. Desarrolladores, atencion, que HTML5 llego aque tiempo!

Gabriel Acevedo

DesaprobarAprobar38Gabriel Acevedo dijo el 29-1-2010 a las 01:42:

8

Excelente post. Hace tiempo no leía un buen artículo técnico aquí en FW.

Saludos¡

leo

DesaprobarAprobar15leo dijo el 29-1-2010 a las 01:46:

9

totalmente deacuerdo con la concluciones, si el codigo del programa fuera libre o abierto el problema tendria solution

Flavio camus

DesaprobarAprobar18Flavio camus dijo el 29-1-2010 a las 01:47:

10

me acorde de varias malas practicas de las clases de analisis y diseño de swr.
Buen articulo Franco, gracias por subir el nivel de FW

Pipirisnais

DesaprobarAprobar29Pipirisnais dijo el 29-1-2010 a las 01:52:

11

Simplemente GRACIAS!!! de verdad que se agradecen este tipo de artículos.

Carlos R.

DesaprobarAprobar32Carlos R. dijo el 29-1-2010 a las 01:53:

12

Cada segundo invertido en la elaboración del post valió la pena Franco.

Ahora comprendo todo.

Mario Cares

DesaprobarAprobar34Mario Cares dijo el 29-1-2010 a las 02:01:

13

Es raro encontrarse con esta clase de redacciones en FayerWayer.
Así da gusto leer :)

Mis felicitaciones al SR. Catrin

Jose

DesaprobarAprobar11Jose dijo el 29-1-2010 a las 02:02:

14

Esto explica el mal rendimiento que tengo con videos en flash en comparacion con windows, otra cosa que no entiendo es, porque los videos en flash me corren mejor sobre chrome que con firefox?

Guatón Campero

DesaprobarAprobar31Guatón Campero dijo el 29-1-2010 a las 02:06:

15

En el recuento del año 2009 faltó agregar a Franco Catrin como el mejor editor.

Insisto: Catrin 2014.

stargeizer

DesaprobarAprobar7stargeizer dijo el 29-1-2010 a las 02:08:

16

La realidad es que el desarrollador de Adobe de Flash player parece que es novato en el mundo de Linux. Por lo que he visto, intenta hacer las cosas a la manera “windows” cosa que no funciona en el mundo linux. En el mundo windows tienes API y ABI’s perfectamente definidas y estáticas (Cosa que funciona en sistemas cerrados, donde no tienes acceso a código fuente. No es mala práctica en estos sistemas.). Pero en el mundo Linux, eso de API o ABI definida o estática no existe, por la naturaleza abierta del sistema (Si tienes que modificar algo, lo haces en el código fuente y punto, tratar de implementar una práctica que funciona en otros OS cerrados en Linux es pésima práctica). Es por eso que las aplicaciones comerciales de fuente cerrada no tienen (Y dudo que algún día tengan) mayor exito en Linux.

Aunque, IMHO, yo sería feliz si Adobe tuviera versiones nativas de todo su portafolio de software… pero si ya la comunidad esta demostrando un comportamiento un tanto (IMHO) excesivo por el tema Flash Player… creo que hay más esperanzas por el lado Wine…

slowpoke

DesaprobarAprobar16slowpoke dijo el 29-1-2010 a las 02:09:

17

realmente el plugin the flash en linux es ordinario es un insulto para la gente que usa linux, por lo menos ahora sabemos algo de lo que pasa, ahora lo siento por los chicos que usan mac por que ahi creo que es mas ordinario aun

chronnoz

DesaprobarAprobar9chronnoz dijo el 29-1-2010 a las 02:20:

18

que despidan al ql ese y pongan a un equipo que se maneje en linux

Deukalion

DesaprobarAprobar26Deukalion dijo el 29-1-2010 a las 02:25:

19

Lo bueno de chequear fayerwayer todos los días es que a veces se encuentra uno de tus artículos.

Debería llamarse FrancoWayerysusamigos.com

Eduardo RG

DesaprobarAprobar11Eduardo RG dijo el 29-1-2010 a las 02:54:

20

UNO asi al dia y se llevarian todos los premios !!! Buenisimo articulo.
Seria tambien interesante saber por que diablos no hay Flash con ciertos productos Apple.

Gracias !!!

web

DesaprobarAprobar6web dijo el 29-1-2010 a las 03:01:

21

excelente articulo, hace mucho tiempo que me queria conocer que pasaba respecto a flash

enhora buena

h4k

DesaprobarAprobar16h4k dijo el 29-1-2010 a las 03:02:

22

Un sólo desarrollador para el plugin??? miles de weones peliando contra adobe, pero en realidad peliando con un solo weon?? O.o

Me sorprende, me sorprende demasiado. Si el desarrollo del plugin fuese abierto, gran parte de los problemas estarían solucionados.

Gran artículo franco, perfectamente escrito :)

Eduardo RG

DesaprobarAprobar32Eduardo RG dijo el 29-1-2010 a las 03:09:

23

Disculpen pero no puedo evitar poner la verdad sobre lo que pienso del articulo… La verdad es que se ve que quien lo escribe realmente produjo el articulo de cabo a rabo, se compromete y se funde con la realización del mismo poniendo su conocimiento y opiniones en el artículo. No quiero decir que acá se copien las noticias que todos los demás blogs tienen, OJO!! si no que realmente es emocionante leer tan buen articulo y no encontrarlo en ningún otro lado. Uno dice (como dicen en el History Channel)… esto sí es “Producción Original”. Seria genial poder ver semejante nivel de compromiso con el articulo con los demás artículos, claro que tal vez eso llevaría a que muchos se quejen de que no hay muchos artículos al día. Pero creo que en ese caso la calidad superaría a la cantidad.

freddyx

DesaprobarAprobar11freddyx dijo el 29-1-2010 a las 03:18:

24

wenisiimaaa franco ya se por que te demoraste y sufrias tanto escribiendo esto

es pura calidad

sigue asi amigo !!!

no va afaltar los linuxeros que con ingenieria inversa hagan un flash mejor que el original…

esperemos ese momento…

Francisco

DesaprobarAprobar3Francisco dijo el 29-1-2010 a las 03:18:

25

Interesante y excelente articulo. Como se mencionó, el grave error que cometió es no recibir la ayuda de la comunidad en los ámbitos en que los desarrollado(es) de flash no son expertos. Aunque no creo que pierda puntos flash con estos problemas en la web, a lo mas en lo que se refiere al streaming de video.

FRODOS

DesaprobarAprobar9FRODOS dijo el 29-1-2010 a las 03:23:

26

Simplemente un placer leer este tipo de articulos!

Wilson

DesaprobarAprobar7Wilson dijo el 29-1-2010 a las 03:46:

27

@chronnoz @h4k: +1 directo al grano
a mi también me sorprendió el hecho de que haya sólo un mequetrefe haciendo un plugin indispensable para la web. En fin, todos tenemos claro que Flash es más bien un “virus”: indispensable en el PC, cerrado, lento.. e incluso los maqueros/linuxeros salen perjudicados cuando se ponen el notebook en las piernas, porque el calor daña o mata a los espermatozoides y por favor alguien piense en los niños!!!
Pero bueno, HTML5 parece ser el futuro del vídeo en la web, Apple ya comenzó a cabar la tumba de Flash, y quizás por aquí vaya la respuesta al enigma del anhelado plugin para iPhone OS como mensiona @Eduardo RG.
Un dato: en linux (nVidia+Amd), youtube y vimeo se me ven más fluidos cuando tengo desactivada la aceleración de hardware en flash.. (pero con compiz activado) …mi computador es bkn, a contra la corriente

Buen artículo Franco
Saludos

Diego

DesaprobarAprobar1Diego dijo el 29-1-2010 a las 04:42:

28

Pero al final va a cambiar algo? Excelente articulo, pero después de toda esta discusión, el desarrollador va a implementar la aceleración por hardware con la API de Intel? Vamos a estar a la par de Windows?

Axan

DesaprobarAprobar4Axan dijo el 29-1-2010 a las 05:01:

29

Da gusto leer estos articulos y entender, Acercas el contenido tecnico a un nivel que el lector comun pueda entender, You dumbed it down.

josuno

DesaprobarAprobar8josuno dijo el 29-1-2010 a las 06:20:

30

@Wilson: Macromedia sabia lo que estaba haciendo, pero llego Adobe y masifico Flash a todo lo que da, para llegar al video, creo que no es nada malo este tipo de eventos, porque de una cosa si se esta dando cuenta Adobe es que no podrá llegar muy lejos, con el nuevo sistema de programación y desarrollo, por eso Intel esta interesado en poner en todos los procesadores del mundo su codigo base de Flash player, es una ayudadota, pero no solo de x86 viven las computadoras, ahora con el ARM de apple, Adobe lo que tuvo que hacer es crear la forma de desarrollar Flash para el iPhone OS, sin usar Flash Player, bueno eso sucederá con el CS5.

Sobre el articulo pone en manifiesto que aun cuando Linux es de codigo abierto, no todas las aplicaciones tienen tribus de seguidores, tratando de hayar el mejor resultado, pero se le agradece a Mike Melanson, aun con sus errores, el haberse tomado la molestia de hacer algo para que todos puedan ver videos de flash en Linux.

Fayerwayer tiene que evolucionar a algo mejor, Buen articulo Franco, ahora esperemos que ya se pongan a trabajar en la app para leer Fayerwayer con edición de revista en el iPad XD ó mínimo regalen un Zinio mensual edición especial para el iPhone XD

Deja tu Comentario

XHTML: Puedes usar: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

La opción de comentar está abierta a todos los usuarios, pero te pedimos por favor mantenerte dentro del tema del artículo y no publicar comentarios ofensivos o publicidad basura. Nos reservamos el derecho de eliminar cualquier comentario que no cumpla estas reglas.

Por favor, complete los campos obligatorios

Previsualizar comentario?