2011-02-10 78 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卡供应商特定的。

对不起的答案是没有更具体的,但我希望这点你在正确的方向...

相关问题