2011-02-10 11 views
5

¿Es posible (preferiblemente con .NET) determinar si un video se está reproduciendo actualmente? Incluso si está limitado a la reproducción acelerada por hardware, sería mejor que nada.¿Es posible determinar mediante programación si se está reproduciendo un video?

Puntos de bonificación si puedo determinar qué pantalla se está reproduciendo en un sistema de múltiples monitores.

+1

estás hablando detectar si se está jugando en un sitio web? o solo en general? – Jason

+0

Solo en general. Media Player, VLC, etc. usan aceleración de tarjeta de video si está disponible con superposiciones, etc. Estoy tratando de atrapar si eso está sucediendo. – Boarder2

+0

Pregunta similar con algunas posibles soluciones: http://stackoverflow.com/questions/11177373/how-to-detect-if-any-video-is-being-played-now – TheLegendaryCopyCoder

Respuesta

0

No creo que sea globalmente posible ya que el video se puede reproducir a través de DirectX, OpenGL o incluso GDI. Creo que su mejor opción es tener una lista blanca de aplicaciones que se utilizan para reproducir y sondear los procesos en ejecución. Una vez que tenga el proceso, puede intentar encontrar sus ventanas/controles y tal vez intentar obtener el HDC y usar la API apropiada (DirectShow más probable) para consultar o manipular el dispositivo.

Cuando tiene una ventana, una simple llamada a System.Windows.Forms.Screen le dirá qué pantalla muestra estas coordenadas.

3

Investigar DirectShowSpy de alax.info. Esto le permitirá "espiar" al ejecutar gráficos de DirectShow. Muy útil junto con una herramienta como GraphStudio.

Soy un desarrollador de C++ escribiendo aplicaciones DirectShow, y uso ambas herramientas todo el tiempo, son herramientas de depuración indispensables.

Google el tema de la tabla de objetos en ejecución. Los gráficos de DirectShow se agregan (normalmente) a la tabla de objetos en ejecución, por lo que puede enumerar el ROT para determinar qué gráficos se están ejecutando en el sistema.

Su tarjeta de video empleará un filtro de renderizador DirectShow para reproducir video dentro de un gráfico de Directshow. El renderizador normalmente es alimentado por un filtro decodificador. El filtro del decodificador hace el trabajo de decodificar video y es el decodificador el que debe ser instruido para usar la aceleración DXVA.

Por ejemplo, puede tener un filtro decodificador H.264 en un gráfico de reproducción, debe indicarle que use la aceleración DXVA.

Según mi experiencia, el filtro del decodificador tendrá una opción que le permitirá activar/desactivar la decodificación de video acelerada DXVA, pero esto será específico del decodificador en cuestión, y por lo tanto será mucho más difícil para detectar universalmente.

Así, por ejemplo, podría escribir código para detectar si DXVA está habilitado al consultar el filtro del decodificador en un gráfico en ejecución que está decodificando una transmisión H.264, pero es probable que el código para consultar el filtro del decodificador para un gráfico VP8 código diferente

This MSDN link apoya mi experiencia de que la aceleración DXVA se alterna a través del filtro del decodificador; puede haber alguna manera de consultar una tarjeta gráfica, pero creo que esto sería específico del proveedor de la tarjeta gfx.

sentimos las respuestas no fueron más específicos, pero espero que se apunta en la dirección correcta ...

Cuestiones relacionadas