2011-02-10 10 views
5

ビデオが現在再生中であるかどうかを判断することができます(.NETの場合が好ましい)?ハードウェアアクセラレーションによる再生に限定されていても、それは何よりも優れています。ビデオが再生されているかどうかをプログラムで判断することはできますか?

マルチモニタシステムでどのディスプレイが再生されているかを判断できる場合は、ボーナスポイントが必要です。

+1

...答えは、より具体的ではなかったが、私はそれが正しい方向にあなたを指し願って申し訳ありませんが、あなたはそれがウェブサイト上で遊んでいた場合に検出について話していますか?または単に一般的に? – Jason

+0

まあまあです。メディアプレーヤー、VLCなどのオーバーレイなどで利用可能な場合は、ビデオカードのアクセラレーションを使用します。私はそれが起こっている場合はトラップしようとしている。 – Boarder2

+0

いくつかの可能な解決策に関する同様の質問:http://stackoverflow.com/questions/11177373/how-to-detect-if-any-video-is-being-played-now – TheLegendaryCopyCoder

答えて

0

DirectX、OpenGL、またはGDIでビデオを再生できるため、グローバルには考えられません。あなたの最善の選択肢は、実行中のプロセスの再生とポーリングに使用されるホワイトリストのアプリケーションを持つことです。プロセスが完了したら、Windows /コントロールを試してみてください。おそらく、HDCを入手し、適切な(おそらくDirectShowの)APIを使用して、デバイスをクエリまたは操作してみてください。

を簡単に呼び出すと、System.Windows.Forms.Screenが表示され、これらの座標が表示されます。

3

調査します。DirectShowSpy alax.infoから。これにより、実行中のDirectShowグラフをスパイすることができます。 GraphStudioのようなツールと組み合わせて非常に便利です。

私はC++の開発者であり、常に両方のツールを使用していますが、それらは不可欠なデバッグツールです。

Google Running Object Tableの件名です。 DirectShowグラフは、通常は実行オブジェクトテーブルに追加されるため、システム上で実行されているグラフを特定するためにROTを列挙できます。

ビデオカードでは、DirectShowレンダラフィルタを使用してDirectShowグラフ内のビデオを再生します。レンダラは、通常、デコーダフィルタによって供給される。デコーダフィルタはビデオをデコードする作業を行い、DXVAアクセラレーションを使用するよう指示されなければならないデコーダです。

たとえば、再生グラフにH.264デコーダフィルタがある場合は、DXVAアクセラレーションを使用するように指示する必要があります。

私の経験では、デコーダフィルタにはDXVAアクセラレーションビデオデコードをオン/オフできるオプションがありますが、これは問題のデコーダ固有のものであり、したがって、はるかに難しくなります普遍的に検出する。

たとえば、H.264ストリームをデコードしている実行中のグラフでデコーダフィルターを照会することでDXVAが有効になっているかどうかを検出するコードを作成できますが、VP8グラフのデコーダフィルターを照会するコードでは、異なるコード。

This MSDN link DXVAアクセラレーションがデコーダフィルタで切り替えられるという私の経験をサポートしています。グラフィックスカードを照会する方法があるかもしれませんが、これはgfxカードベンダ固有のものだと思います。

関連する問題