是否有可能以编程方式确定视频是否正在播放?

时间:2011-02-10 01:32:27

标签: c# .net video directx

是否可以(最好使用.NET)确定视频当前是否正在播放?即使它仅限于硬件加速播放,也会比没有好。

如果我可以确定正在播放的多监视器系统中的显示内容,则获得积分。

2 个答案:

答案 0 :(得分:3)

从alax.info调查DirectShowSpy。这将允许您“间谍”运行DirectShow图。与GraphStudio等工具配合使用非常有用。

我是一名编写DirectShow应用程序的C ++开发人员,并且一直使用这两种工具,它们是不可或缺的调试工具。

Google运行对象表的主题。 DirectShow图(通常)被添加到运行对象表中,因此您可以枚举ROT以确定系统上正在运行的图形。

您的视频卡将使用DirectShow渲染器过滤器在Directshow图表中播放视频。渲染器通常由解码器滤波器馈电。解码器滤波器完成解码视频的工作,必须指示解码器使用DXVA加速。

例如,您可能在回放图中有一个H.264解码器过滤器,您必须指示它使用DXVA加速。

根据我的经验,解码器滤波器可以选择允许您打开/关闭DXVA加速视频解码,但这将特定于所讨论的解码器,因此它将变得更加困难。普遍检测。

因此,例如,您可以通过在正在解码H.264流的运行图中查询解码器过滤器来编写代码来检测DXVA是否已启用,但是查询解码器过滤器以查找VP8图的代码很可能会有所不同代码。

This MSDN link支持我通过解码器过滤器切换DXVA加速的经验;可能有某种方式来查询显卡,但我认为这将是gfx卡供应商特定的。

对不起,答案并不是更具体,但我希望它指出你正确的方向......

答案 1 :(得分:0)

由于视频可以通过DirectX,OpenGL甚至GDI播放,因此我认为全球无法实现。我认为您最好的选择是拥有一个白名单的应用程序,用于回放和轮询正在运行的进程。完成此过程后,您可以尝试找到它的窗口/控件,并尝试获取HDC并使用适当的(最可能是DirectShow)API来查询或操作设备。

当您有一个窗口时,对 System.Windows.Forms.Screen 的简单调用将告诉您显示这些坐标的屏幕。