次の方法で共有


シーク機能のクエリ

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

Microsoft® DirectShow では®、 IMediaSeeking インターフェイスを介したシークがサポートされています。 Filter Graph Manager はこのインターフェイスを公開しますが、シーク機能は常にグラフ内のフィルターによって実装されます。

一部のデータはシークできません。 たとえば、カメラからライブ ビデオ ストリームをシークすることはできません。 ただし、ストリームがシーク可能な場合は、さまざまな種類のシークがサポートされる可能性があります。 具体的な内容は次のとおりです。

  • ストリーム内の任意の位置をシークします。
  • ストリームの期間を取得しています。
  • ストリーム内の現在位置の取得。
  • 逆に再生します。

IMediaSeeking インターフェイスは、可能なシーク機能を記述するフラグのセット (AM_SEEKING_SEEKING_CAPABILITIES) を定義します。 ストリームの機能を取得するには、 IMediaSeeking::GetCapabilities メソッドを 呼び出します。 メソッドは、フラグのビットごとの組み合わせを返します。 アプリケーションでは、(ビットごとの AND) 演算子を&使用してテストできます。 たとえば、次のコードは、グラフが任意の位置にシークできるかどうかを確認します。

DWORD dwCap = 0;
HRESULT hr = pSeek->GetCapabilities(&dwCap);
if (AM_SEEKING_CanSeekAbsolute & dwCap)
{
    // Graph can seek to absolute positions.
}