非同期リーダーを使用してフレーム番号でシークするには

[このページに関連付けられている機能である Windows Media Format 11 SDK は、従来の機能です。 ソース リーダーシンク ライターに置き換わりました。 ソース リーダーシンク ライターは、Windows 10とWindows 11用に最適化されています。 Microsoft では、可能であれば、新しいコードで Windows Media Format 11 SDK ではなくソース リーダーシンク ライターを使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]

非同期リーダー オブジェクトを使用して、ASF ファイル内のビデオ ストリームのフレーム番号をシークできます。 フレーム ベースのシークを使用するには、リーダーに読み込まれたファイルのインデックスをフレームで作成する必要があります。 個々のビデオ ストリームのインデックスを作成できます。 ストリームがフレームによってインデックス付けされているかどうかを確認するには、IWMHeaderInfo::GetAttributeByName を呼び出して、ファイルのヘッダーにg_wszWMNumberOfFrames属性をチェックできます。

非同期リーダーを使用してフレーム番号で ASF ファイル内のデータをシークするには、次の手順を実行します。

  1. IWMReader::QueryInterface を呼び出して、リーダー オブジェクトの IWMReaderAdvanced3 インターフェイスへのポインターを取得します。
  2. IWMReaderAdvanced3::StartAtPosition を呼び出して、開始フレーム番号と継続時間を設定します。 フレーム インデックス付きビデオ ストリームのストリーム番号を指定する必要があります。 リーダーは、出力の残りの部分を、指定したストリームの指定されたフレームのプレゼンテーション時間に同期し、出力サンプルの配信を開始します。
  3. IWMReaderCallback::OnSample メソッドの実装で通常と同じようにサンプルを処理します。

非同期リーダーを使用したファイルの読み取り

再生時のメタデータの読み取り

インデックスの使用