2011-02-10 14 views
5

È possibile (preferibilmente con .NET) determinare se un video è attualmente in riproduzione? Anche se è limitato alla riproduzione con accelerazione hardware, sarebbe meglio di niente.È possibile determinare a livello di programmazione se un video è in riproduzione?

Punti bonus se è possibile determinare quale visualizzazione in un sistema multi-monitor su cui è in corso la riproduzione.

+1

stai parlando rilevare se sta giocando su un sito web? o solo in generale? – Jason

+0

Solo in generale. Media Player, VLC, ecc. Usano l'accelerazione della scheda video, se disponibile con sovrapposizioni, ecc. Sto cercando di intrappolare se ciò accade. – Boarder2

+0

Domanda simile con alcune possibili soluzioni: http://stackoverflow.com/questions/11177373/how-to-detect-if-any-video-is-being-played-now – TheLegendaryCopyCoder

risposta

0

Non credo sia globalmente possibile in quanto i video possono essere riprodotti su DirectX, OpenGL o persino GDI. Penso che l'opzione migliore sia avere una lista bianca di applicazioni che vengono utilizzate per la riproduzione e il polling sui processi in esecuzione. Una volta che hai il processo, puoi provare a trovare i suoi windows/controlli e magari cercare di ottenere l'HDC e usare l'API appropriata (DirectShow molto probabilmente) per interrogare o manipolare il dispositivo.

Quando si dispone di una finestra di una semplice chiamata al System.Windows.Forms.Screen vi dirà che cosa sta mostrando schermo queste coordinate.

3

Investigare DirectShowSpy da alax.info. Ciò ti consentirà di "spiare" nell'esecuzione dei grafici di DirectShow. Molto utile in combinazione con uno strumento come GraphStudio.

Sono uno sviluppatore C++ che scrive applicazioni DirectShow e usa entrambi gli strumenti tutto il tempo, sono indispensabili strumenti di debug.

Google l'oggetto della tabella degli oggetti in esecuzione. I grafici di DirectShow sono (normalmente) aggiunti alla tabella degli oggetti in esecuzione, quindi è possibile enumerare il ROT per determinare quali grafici sono in esecuzione sul sistema.

La scheda video utilizzerà un filtro di rendering DirectShow per riprodurre video all'interno di un grafico Directshow. Il renderer viene normalmente alimentato da un filtro decodificatore. Il filtro decodificatore fa il lavoro di decodifica video ed è il decoder che deve essere istruito per utilizzare l'accelerazione DXVA.

Quindi, ad esempio, si potrebbe avere un filtro decodificatore H.264 in un grafico di riproduzione, è necessario istruire l'utente sull'accelerazione DXVA.

È stata la mia esperienza che il filtro del decodificatore avrà un'opzione per consentire di attivare/disattivare la decodifica video accelerata DXVA, ma questo sarà specifico per il decodificatore in questione, e quindi sarà molto più difficile per rilevare universalmente.

Ad esempio, è possibile scrivere codice per rilevare se DXVA è abilitato interrogando il filtro del decodificatore in un grafico in esecuzione che decodifica un flusso H.264, ma il codice per interrogare il filtro del decoder per un grafico VP8 molto probabilmente avrà codice diverso

This MSDN link supporta la mia esperienza che l'accelerazione DXVA è attivata tramite il filtro del decodificatore; potrebbe esserci un modo per interrogare una scheda grafica, ma penso che questo sarebbe specifico del fornitore di schede gfx.

spiacenti le risposte non erano più specifico, ma spero che si punta nella direzione giusta ...

Problemi correlati