シーク機能のクエリ
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/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.
}