2011-02-10 135 views
5

是否有可能(最好使用.NET)來確定視頻當前正在播放?即使它只限於硬件加速播放,那也沒有什麼好處。是否有可能以編程方式確定視頻是否正在播放?

獎勵積分,如果我能確定它是玩什麼顯示在多顯示器系統上。

+1

你在說什麼檢測,如果是打在網站上?或只是一般? – Jason 2011-02-10 02:53:04

回答

0

我不認爲這是全球可能的,因爲視頻可以通過DirectX,OpenGL甚至GDI播放。我認爲你最好的選擇是有一個白色的應用程序列表,用於播放和輪詢正在運行的進程。一旦你有了這個過程,你可以嘗試找到它的窗口/控件,也許嘗試獲取HDC並使用合適的(DirectShow最可能)API來查詢或操作設備。

當你有一個窗口,簡單地調用System.Windows.Forms.Screen會告訴你什麼屏幕顯示這些座標。

3

調查DirectShowSpy從alax.info。這將允許您「偵察」運行DirectShow圖形。與GraphStudio等工具配合使用非常有用。

我是一名編寫DirectShow應用程序的C++開發人員,並且始終都使用這兩種工具,它們是必不可少的調試工具。

谷歌運行對象表的主題。 DirectShow圖形(通常)被添加到運行對象表中,因此您可以枚舉ROT以確定系統上運行的圖形。

您的視頻卡將採用DirectShow渲染器過濾器來播放Directshow圖形中的視頻。渲染器通常由解碼器過濾器提供。解碼器濾波器執行解碼視頻的工作,並且它是必須被指示使用DXVA加速的解碼器。

因此,例如,您可能在播放圖中使用了H.264解碼器濾鏡,則必須指示它使用DXVA加速。

我的經驗是,解碼器過濾器將有一個選項來允許您打開/關閉DXVA加速視頻解碼,但這將是特定於解碼器的問題,因此它會更困難以普遍檢測。因此,例如,您可能會編寫代碼來檢測DXVA是否通過查詢正在解碼H.264流的正在運行的圖中的解碼器過濾器來啓用,但是查詢解碼器過濾器以獲取VP8圖的代碼很可能會不同的代碼。

This MSDN link支持我的經驗,DXVA加速切換通過解碼器過濾器;可能有一些方法來查詢顯卡,但我認爲這將是gfx卡供應商特定的。

對不起的答案是沒有更具體的,但我希望這點你在正確的方向...