DirectShow での ASF ファイルの読み取り (Windows Media Format 11 SDK)
[このページに関連付けられている機能である Windows Media Format 11 SDK は、従来の機能です。 ソース リーダーとシンク ライターに置き換わりました。 ソース リーダーとシンク ライターは、Windows 10とWindows 11用に最適化されています。 Microsoft では、可能であれば、新しいコードで Windows Media Format 11 SDK ではなくソース リーダーとシンク ライターを使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
ASF ファイルの再生は、 WM ASF リーダー フィルターによって処理されます。 WM ASF リーダーは、ファイルを読み取ると、Web ストリーム、スクリプト コマンド ストリーム、その他の種類の任意のストリームなど、ストリームごとに出力ピンを自動的に作成します。 複数のビットレート ファイルの場合、ピンは現在選択されているストリームに対してのみ作成されます。
WM ASF Reader では DirectShow IMediaSeeking インターフェイスがサポートされています。これにより、アプリケーションはファイル内でテンポラル シークを実行できます。 ただし、1.0 ( IMediaSeeking::SetRate で指定されている) 以外の速度での再生はサポートされていません。
このフィルターでは、次の表で説明するように、いくつかの Windows Media Format SDK インターフェイスも公開されます。
インターフェイス | 公開方法 | 説明 |
---|---|---|
IWMDRMReader | フィルターでの IServiceProvider による | Digital Rights Management (DRM) によって保護されたコンテンツを再生する必要があるアプリケーション用に提供されます。 このインターフェイスを使用して、Reader オブジェクトの他のインターフェイスを直接取得することもできます。 |
IWMHeaderInfo | フィルター時の QueryInterface | アプリケーションがファイルとコンテンツの属性、マーカーとスクリプトの情報とメタデータを読み取ることができるように提供されます。 |
IWMReaderAdvanced | フィルター時の QueryInterface | アプリケーションが WM Reader オブジェクトの情報メソッドにアクセスできるように、フィルターに部分的に実装されます。 |
IWMReaderAdvanced2 | フィルター時の QueryInterface | アプリケーションが Reader オブジェクトの情報メソッドにアクセスできるように、フィルターに部分的に実装されます。 |
WM ASF リーダー フィルターは、DirectShow 8.0 で最初に使用できるようになりました。 DirectShow 8.1 および 9.0 に付属するフィルターのバージョンでは、バージョン 7 がサポートされています。x は Windows Media Format SDK のです。 フィルターの最新バージョンは、他の QASF コンポーネントと共に、Windows Media Format 9 Series SDK 以降のバージョンに付属しており、DirectX 9.0 のフィルターよりも優先されます。 DirectX 8 をインストールした後に Windows Media Format SDK をインストールする場合。x または 9。x SDK では、DirectX バージョンの qasf.dll を 9 シリーズ バージョンで上書きします。 これにより、DirectShow IGraphBuilder::RenderFile メソッドで動作が異なるシナリオがある場合を除き、問題は発生しません。 WM ASF リーダーの Windows Media Format 9 Series SDK バージョンは、.asf、.wmv、および .wma ファイル名拡張子の既定のソース フィルターです。 つまり、この種類のファイルを指定すると、IGraphBuilder::RenderFile や IGraphBuilder::AddSourceFilter などのメソッドで、フィルター グラフ マネージャーによって WM ASF リーダーが自動的に作成され、フィルター グラフに追加されます。 DirectX 9.0 以前および Windows XP Service Pack 1 以前では、 RenderFile メソッドは以前の Windows メディア ソース フィルターを使用します。 この動作は、Windows メディア プレーヤー 6.4 を使用したアプリケーションとの下位互換性を確保するために維持されました。 従来の Windows メディア ソース フィルターの詳細については、「DirectShow SDK ドキュメント」を参照してください。
WM ASF リーダーを使用して Windows Media ベースのコンテンツで ASF ファイルを再生するには、3 つの主な手順として、フィルター グラフ マネージャーのインスタンスを作成し、 IGraphBuilder::RenderFile を呼び出してグラフを作成し、 IMediaControl::Run を呼び出してファイルを再生します。 次のコード例は、DirectShow を使用して ASF ファイルを再生する完全なプログラムです。 この例を実行するには、DirectX SDK をインストールし、DirectShow SDK のドキュメント トピック「ビルド環境のセットアップ」の手順に従ってビルド環境を構成する必要があります。また、 RenderFile の呼び出しで、コンピューター上のファイルを指定する必要があります。
#include <dshow.h>
#include <stdio.h>
void main(void)
{
IGraphBuilder *pGraph = NULL;
IMediaControl *pControl = NULL;
IMediaEvent *pEvent = NULL;
// Initialize the COM library.
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
printf("ERROR - Could not initialize COM library");
return;
}
// Create the Filter Graph Manager and query for interfaces.
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&pGraph);
if (FAILED(hr))
{
printf("ERROR - Could not create the Filter Graph Manager.");
return;
}
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
// Build the graph. IMPORTANT: Change this string to a file
// on your system.
hr = pGraph->RenderFile(L"test.wmv", NULL);
if (SUCCEEDED(hr))
{
// Run the graph.
hr = pControl->Run();
if (SUCCEEDED(hr))
{
// Wait for completion.
long evCode;
pEvent->WaitForCompletion(INFINITE, &evCode);
// Note: Do not use INFINITE in a real application, because it
// can block indefinitely.
}
}
pControl->Release();
pEvent->Release();
pGraph->Release();
CoUninitialize();
}
この簡単な例のアプリケーション コードでは、WM ASF リーダーを特に参照しません。 そのフィルターは、フィルター グラフ マネージャーによって作成、接続、実行、および最終的にリリースされます。 ただし、多くのシナリオでは、再生を開始する前に WM ASF リーダーを構成できます。