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

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

非同期リーダーは、複数のスレッドと非同期呼び出しを使用して ASF ファイルからコンテンツを読み取ります。 非同期リーダーでサポートされている機能は、エンド ユーザーにコンテンツをレンダリングするアプリケーションに適しています。

リーダー オブジェクトの最も基本的な機能は、次の手順に分けることができます。 これらの手順では、"アプリケーション" は、Windows Media Format SDK を使用して記述するプログラムを指します。

  1. アプリケーションは、リーダーからのメッセージを処理する IWMReaderCallback インターフェイスを実装します。 これには、リーダーのさまざまな側面の状態に関連するメッセージを受信する OnStatus と、リーダーから圧縮されていないサンプルを受信する OnSample という 2 つのコールバック メソッドが含まれます。
  2. アプリケーションは、読み取るファイルの名前をリーダーに渡します。 リーダーがファイルを開くと、各ストリームに出力番号が割り当てられます。 ファイルで相互除外が使用されている場合、リーダーは相互に排他的なすべてのストリームに 1 つの出力を割り当てます。
  3. アプリケーションは、リーダーからさまざまな出力の構成に関する情報を取得します。 収集された情報により、アプリケーションはメディア サンプルを適切にレンダリングできます。
  4. アプリケーションは、ファイルからのデータの読み取りを開始するようにリーダーに指示します。 リーダーは、圧縮されていないサンプルを、バッファー オブジェクトでラップされたバッファーで一度に 1 つずつ OnSample コールバックに配信し始めます。 リーダーによって配信されるサンプルは、プレゼンテーションと時刻の順に並べ替えられます。 リーダーは、アプリケーションによって停止されるまで、またはファイルの末尾に達するまで、サンプルの配信を続行します。
  5. アプリケーションは、リーダーによって配信された後にデータをレンダリングする役割を担います。 Windows Media Format SDK では、レンダリング ルーチンは提供されません。 通常、アプリケーションは他の SDK を使用して、Microsoft DirectX® SDK や Microsoft Windows プラットフォーム SDKのマルチメディア機能などのデータをレンダリングします。
  6. 読み取りが完了すると、アプリケーションはファイルを閉じるようリーダーに指示します。

これらの手順は、AudioPlayer サンプル アプリケーションなどに示されています。 詳細については、「 サンプル アプリケーション」を参照してください。

リーダーは、より高度な機能もサポートしています。 リーダーを使用すると、次の操作を実行できます。

  • ファイルの再生を一時停止します。
  • 閲覧者のパフォーマンス統計を取得します。
  • 相互に排他的なストリームのストリーム選択を制御します。
  • 出力用にバッファーを手動で割り当てます。
  • 独自のクロックを指定します。
  • ファイル操作の状態 (バッファリング、ダウンロード、または保存) を取得します。
  • 標準の COM インターフェイス IStream を使用してファイルを開きます。
  • ASF ファイル内の特定のポイントをシークします。
  • ファイルのヘッダーからプロファイル データを読み取ります。

次のセクションでは、リーダー オブジェクトの使用方法について詳しく説明します。

ASF ファイルの読み取り

リーダー オブジェクト