次の方法で共有


ビデオ コントロールによるファイル再生 (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 フレームをコマ送りする。
}