ポスターフレームのつかみ取り
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
[この API はサポートされていないため、今後変更または使用できない可能性があります。]
この記事では、DirectShow Editing Services で提供される Media Detector (MediaDet) オブジェクトを使用して、デジタル メディア ファイルからポスター フレームを表示する方法について説明します。
Media Detector は、メディア ソース ファイルから形式情報を取得できるヘルパー オブジェクトです。 また、ソース ファイル内のビデオ ストリームからビットマップ イメージを取得することもできます。 ファイルがシーク可能であると仮定すると、ファイル内の任意のポイントからイメージを取得できます。 返されるイメージは常に 24 ビット RGB 形式です。
Media Detector はフィルターではなく、アプリケーションでフィルター グラフ マネージャーを使用したり、フィルター グラフを作成したりする必要はありません。 内部的には、Media Detector によって 、サンプル グラバー フィルターを含むフィルター グラフが作成されます。 ビットマップを取得するために、Media Detector はフィルター グラフをシークして一時停止し、サンプル グラバー フィルターからビットマップを取得します。 アプリケーションは 、IMediaDet インターフェイスを介して Media Detector と通信します。 Media Detector は、グラフ関連の詳細からアプリケーションを保護するために、ヘルパー オブジェクト内にフィルター グラフをカプセル化する良い例です。
Media Detector は 2 つのモードで動作します。 最初に作成すると、Media Detector は "情報収集" モードになります。 メディア ファイルの名前を指定し、フォーマットの種類、フレーム レート、期間など、ファイル内の各ストリームに関する情報を取得できます。 ファイルにビデオ ストリームが含まれている場合は、Media Detector を "ビットマップ グラブ" モードに切り替えて、ソースからビットマップを取得できます。 ただし、これを行うと、Media Detector を元のモードに戻すことはできません。これは、そのビデオ ストリームに永続的にアタッチされます。 別のストリームまたは別のファイルを操作するには、Media Detector の新しいインスタンスを作成する必要があります。
注意
このチュートリアルのコード例では、参照カウントを自動的に管理する ATL CComPtr クラスを使用します。 生のインターフェイス ポインターを使用する場合は、インターフェイスが完了したら、必ずすべてのインターフェイスを解放してください。 また、簡潔にするために、コード例では、アプリケーションが実行する必要があるエラー チェックの多くを省略しています。 作業コードでは、常に HRESULT 値をチェックします。
このチュートリアルで実行する手順は次のとおりです。
- 手順 1: Windows Framework を作成する
- 手順 2: メニュー コマンドを追加してポスター フレームを取得する
- 手順 3: Frame-Grabbing関数を実装する
- 手順 4: クライアント領域にビットマップを描画する
関連トピック