2011-02-10 13 views
5

Czy to możliwe (najlepiej z .NET), aby sprawdzić, czy wideo jest obecnie odtwarzane? Nawet jeśli jest ograniczone do przyspieszania sprzętowego, byłoby to lepsze niż nic.Czy można programowo określić, czy wideo jest odtwarzane?

Punkty premiowe, jeśli mogę określić, który ekran w systemie z wieloma monitorami jest odtwarzany.

+1

mówisz wykrywania, czy to grając na stronie? lub ogólnie? – Jason

+0

Po prostu ogólnie. Media Player, VLC, itp. Używają akceleracji karty wideo, jeśli jest dostępna z nakładkami itp. Próbuję pułapkę, jeśli to się dzieje. – Boarder2

+0

Podobne pytanie z możliwymi rozwiązaniami: http://stackoverflow.com/questions/11177373/how-to-detect-if-any-video-is-being-played-now – TheLegendaryCopyCoder

Odpowiedz

0

Nie sądzę, że jest to globalnie możliwe, ponieważ wideo można odtwarzać za pośrednictwem DirectX, OpenGL lub nawet GDI. Myślę, że najlepszą opcją jest posiadanie białej listy aplikacji używanych do odtwarzania i odpytywania o uruchomionych procesach. Po zakończeniu procesu możesz spróbować znaleźć jego okna/kontrolki i być może spróbować uzyskać HDC i użyć odpowiedniego (DirectShow najprawdopodobniej) API do zapytania lub manipulowania urządzeniem.

Gdy masz okno, wystarczy zadzwonić pod numer System.Windows.Forms.Screen pokaże Ci ekran, na którym wyświetlane są te współrzędne.

3

Zbadaj DirectShowSpy od alax.info. Umożliwi to "szpiegowanie" na wykresach DirectShow. Bardzo przydatne w połączeniu z narzędziem takim jak GraphStudio.

Jestem programistą C++ piszącym aplikacje DirectShow i używam obu tych narzędzi przez cały czas, są niezbędnymi narzędziami do debugowania.

Google tematem tabeli Running Object. Wykresy DirectShow są (zwykle) dodawane do Tabeli Running Object, więc można wyliczyć ROT, aby określić, które wykresy są uruchomione w systemie.

Twoja karta wideo będzie wykorzystywać filtr renderera DirectShow do odtwarzania wideo na wykresie DirectShow. Renderer jest zwykle zasilany przez filtr dekodera. Filtr dekodera wykonuje zadanie dekodowania wideo i jest to dekoder, który musi zostać poinstruowany, aby używać przyspieszenia DXVA.

Na przykład, możesz mieć filtr dekodera H.264 na wykresie odtwarzania, musisz poinstruować go, aby używał akceleracji DXVA.

To było moje doświadczenie, że filtr dekoder będzie miał opcję pozwalają włączyć/wyłączyć DXVA przyspieszane dekodowanie wideo, ale to będą specyficzne do dekodera w pytaniu, a więc będzie to znacznie trudniejsze do powszechnego wykrywania.

Można na przykład napisać kod, aby wykryć, czy funkcja DXVA jest włączona, wysyłając zapytanie do filtru dekodera na uruchomionym wykresie, który dekoduje strumień H.264, ale kod do zapytania o filtr dekodera wykresu VP8 najprawdopodobniej inny kod.

This MSDN link potwierdza moje doświadczenie, że przyspieszenie DXVA jest przełączane przez filtr dekodera; może być jakiś sposób na zapytanie o kartę graficzną, ale myślę, że to byłby konkretny dostawca karty gfx.

Niestety odpowiedzi nie były bardziej szczegółowe, ale mam nadzieję, że punktów w dobrym kierunku ...

Powiązane problemy