Windows Media ファイルへのビデオのキャプチャ
ビデオをキャプチャし、Windows Media Video (WMV) ファイルにエンコードするには、キャプチャ ピンを WM ASF ライタ フィルタに接続する。
このグラフを作成する最も簡単な方法は、ICaptureGraphBuilder2::SetOutputFileName メソッドに MEDIASUBTYPE_Asf を指定することである。
IBaseFilter* pASFWriter = 0;
hr = pBuild->SetOutputFileName(
&MEDIASUBTYPE_Asf, // Windows Media ファイルを作成する。
L"C:\\VidCap.wmv", // ファイル名。
&pASFWriter, // フィルタへのポインタを受け取る。
NULL); // IFileSinkFilter インターフェイス ポインタを受け取る (省略可能)。
値 MEDIASUBTYPE_Asf を指定すると、Capture Graph Builder は WM ASF ライタ フィルタをファイル シンクとして使う。Capture Graph Builder はフィルタを作成し、グラフに追加し、IFileSinkFilter::SetFileName を呼び出して出力ファイル名を設定する。出力パラメータとしてフィルタへのポインタを返す (前の例では pASFWriter)。
Windows Media プロファイルを設定するには、WM ASF ライタの IConfigAsfWriter インターフェイスを使う。この処理は、WM ASF ライタのピンを接続する前に行う必要がある。
IConfigAsfWriter *pConfig = 0;
hr = pASFWriter->QueryInterface(IID_IConfigAsfWriter, (void**)&pConfig);
if (SUCCEEDED(hr))
{
// ASF ライタ フィルタを設定する。
pConfig->Release();
}
プロファイルの設定の詳細については、「DirectShow での ASF ファイルの作成」を参照すること。
キャプチャ フィルタを ASF ライタに接続するには、ICaptureGraphBuilder2::RenderStream を呼び出す。
hr = pBuild->RenderStream(
&PIN_CATEGORY_CAPTURE, // キャプチャ ピン。
&MEDIATYPE_Video, // ビデオ。オーディオには MEDIATYPE_Audio を使う。
pCap, // キャプチャ フィルタへのポインタ。
0,
pASFWriter); // シンク フィルタへのポインタ (ASF ライタ)。
WM ASF ライタ フィルタの各入力ピンは Windows Media プロファイルのストリームに対応する。ファイルの内容をプロファイルに一致させるため、すべてのピンを接続する必要がある。