ビデオ コントロールによるファイル再生 (C++)
このトピックは Windows XP にのみ適用。
ビデオ コントロールを使ってメディア ファイルを再生するには、ファイル名を IMSVidCtl::View メソッドに渡す。
CComVariant var(OLESTR("C:\\Example.avi"));
hr = pVidControl->View(&var);
メソッド呼び出しが成功した場合、アクティブな入力デバイスは MSVidFilePlaybackDevice オブジェクトになる。このオブジェクトは IMSVidFilePlayback インターフェイスを公開する。IMSVidFilePlayback インターフェイスは IMSVidPlayback を継承する。このインターフェイスを使ってファイル内をシークしたり、再生レートを変更したり、内容を確認したりできる。
次のコードは、入力デバイスを取得して再生インターフェイスを問い合わせる方法を示している。
CComPtr<IMSVidInputDevice> pInputDevice;
HRESULT hr = pVidControl->get_InputActive(&pInputDevice);
if (SUCCEEDED(hr))
{
CComQIPtr<IMSVidFilePlayback> pFilePlayback(pInputDevice);
if (pFilePlayback != NULL)
{
/* ファイル再生デバイスがアクティブな入力になっている。 デバイスを
制御するには、IMSVidFilePlayback メソッドを呼び出す。 */
}
}
シークを実行するには put_CurrentPosition メソッドを呼び出す。
hr = pFilePlayback->put_CurrentPosition(200); // 2 ミリ秒
デフォルトの単位は 100 分の 1 秒である。IMSVidPlayback::put_PositionMode メソッドを呼び出して単位をフレームに変更できる。
再生レートを変更するには put_Rate メソッドを呼び出す。
hr = pFilePlayback->put_Rate(2.0); // 通常速度の 2 倍。
フレーム単位で順方向に進めるには、最初に get_CanStep を呼び出してソース ファイルがコマ送りをサポートしているかどうかを確認する。サポートしている場合は、Step メソッドを呼び出してファイルを順方向にコマ送りする。
VARIANT_BOOL fCan;
hr = pFilePlayback->get_CanStep(VARIANT_FALSE, &fCan);
if (SUCCEEDED(hr)) && (fCan == VARIANT_TRUE))
{
hr = pFilePlayback->Step(2); // 2 フレームをコマ送りする。
}