2010-01-26 14 views
6

Creación de prototipos de una aplicación Windows .NET que necesita reproducir video WMV y H264 de alta definición. Mis archivos de prueba están llenos 1080p.Vídeo acelerado por hardware en DirectShow/WinForms

El hardware de destino tiene procesadores Atom débiles pero fuertes gráficos NVidia 9400. Sé que los gráficos están integrados, pero tengo entendido que son buenos para la reproducción de videos.

Testing en Windows 7, si juego mis archivos de prueba en WPF, utilizando el control MediaElement, mi uso de la CPU es 0.

Sin embargo, el sistema operativo de destino es Windows XP y que pueden no tener .NET 3.0 . Por lo tanto, la aplicación debe ejecutarse en WinForms. Por varias razones, Windows Media Player ActiveX no es una opción. Así que estamos viendo DirectShow.

Armado un reproductor usando DirectShow.NET, reproduciendo el video a pantalla completa usando el VMR9. Usando este enfoque, mis archivos WMV consumen entre 20 y 30% de CPU. Tuve que instalar un muxer/demuxer mp4 para incluso reproducir los archivos H264, y luego consumieron 40 - 50% de CPU.

  • Sé que Windows 7 admite H264 fuera de la caja. Sin embargo, parece que no es un filtro DirectShow?
  • ¿Por qué mi video se acelera usando WPF, pero no cuando uso DirectShow? Tengo entendido que DirectShow admite DXvA.

tldr: ¿cómo puedo lograr la reproducción de video acelerada por hardware WMV y H264 en WinForms?

Gracias!

+0

Tendrá que encontrar un decodificador más inteligente que funcione con DirectShow para obtener un mejor rendimiento. Los buenos cuestan dinero, ffdshow es gratis. En algún momento, quizás desee considerar si la instalación de .NET 3.0 en las pocas máquinas XP que aún no la tienen es quizás menos complicada que la instalación de decodificadores posiblemente caros y malhumorados. –

+0

Gracias! Parece que .NET 3.0 EVR es la respuesta ... – TheNextman

Respuesta

2

No tengo una respuesta directa para usted, pero la utilidad del comprobador DXVA me ha ayudado a solucionar problemas de DXVA en el pasado. Aquí hay un enlace de descarga: http://bluesky23.hp.infoseek.co.jp/en/index.html

+0

¡Gracias! Esta es una herramienta increíble. Me permite especificar el filtro DirectShow/MediaFoundation para usar, así como seleccionar el renderizador de video para reproducir mis archivos. – TheNextman

2

He hecho algunas comprobaciones con la utilidad DXVA recomendada por Jeremiah Morill.

tengo una idea bastante buena de lo que está pasando ahora ....

  • creo que el apoyo H264 en Windows 7 es proporcionada por MediaFoundation, lo que explica por qué mi aplicación DirectShow no puede utilizarlo!
  • La ejecución de un video WMV usando el filtro DirectShow en Windows 7 proporciona diferentes niveles de rendimiento dependiendo del renderizador (VMR7/VMR9/EVR). El VMR7 es el que requiere menos procesador (6 - 7% de CPU) pero de peor calidad, el EVR (8 - 12% de CPU) es un poco más eficiente que el VMR9 (12 - 13% de CPU) sin embargo, ambos se ven similares. Sin embargo, el kicker es el filtro MediaFoundation, que obviamente está completamente acelerado y usa 0% de CPU. Por lo tanto, ¿supongo que en Windows 7, MediaElement usa MediaFoundation?

Así que la conclusión es que tengo que probar en una caja de Windows XP con los gráficos 9400. Parece que la aceleración de hardware completa no será posible (ya que no tenemos MediaFoundation, y por lo tanto no tenemos DXvA2) ...

¡Gracias de nuevo por la ayuda!

+0

¡Suena bien! En Vista y 7, Windows Media Player seleccionará la ruta de MediaFoundation o la ruta de DirectShow en función del tipo de archivo. WPF MediaElement utiliza Windows Media Player OCX internamente, por lo que WMP y MediaElement deberían tener características de rendimiento similares. –

+1

¿Es esa medida del 0% proveniente del administrador de tareas estándar o del Explorador de procesos? Sospecho que el administrador de tareas simplemente no puede informar el tiempo de CPU gastado en el código del sistema. – Alan

+0

¡Gracias chicos! Y sí, la medida viene de TM. Aprecio que no sea estrictamente preciso, pero sirvió como una especie de 'patrón' para comparar las diferentes tuberías ... – TheNextman

4

Hay muchos hardware comerciales acelerados h264 directshow filtros disponibles por ahí. Algunos usan DXVA, algunos usan Cuda. Ninguno de ellos es gratis, pero la mayoría de ellos no son caros. Ffdshow y los proyectos de ffmpeg relacionados son geniales, pero definitivamente no harán HD h264 en una CPU de Atom.(Si alguien puede probar lo contrario, me gustaría saber de usted.)

He estado reproduciendo HD h264 en la misma plataforma Ion que usted describió, usando DirectShow en XP. Es límite en el rendimiento para 1080p, pero puede administrarlo si puede limitar la velocidad de bits y no necesita hacer muchas otras tareas de CPU o GPU al mismo tiempo. 720p es mucho más cómodo, especialmente si puede funcionar con 24 o 30 fps en lugar de 60.

Por fuera de mi cabeza, los códecs que funcionaban mejor en el Ion para h264 eran MainConcept, CoreAVC y Cyberlink .

También recomendaría probar VMR7 en lugar de VMR9 si esa es una opción para usted. Algunos códecs DXVA son más confiables y tienen un mejor rendimiento con VMR7.

+0

Es genial escuchar que has tenido éxito con DShow en la plataforma Ion, incluso si lo necesitas un decodificador comercial! Voy a configurar mi hardware de prueba con XP y probaré algunas de sus recomendaciones. ¡Gracias! – TheNextman

Cuestiones relacionadas