ネットワーク ソースからのファイルの再生
[このページに関連付けられている機能である Windows Media Format 11 SDK は、従来の機能です。 ソース リーダーとシンク ライターに置き換わりました。 ソース リーダーとシンク ライターは、Windows 10とWindows 11用に最適化されています。 Microsoft では、可能であれば、新しいコードで Windows Media Format 11 SDK ではなくソース リーダーとシンク ライターを使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
ネットワークからの読み取りは、ローカル ファイルの読み取りと根本的に変わるものではありません。 アプリケーションは URL をリーダー オブジェクトの IWMReader::Open メソッドに渡し、リーダー オブジェクトはネットワーク プロトコルの詳細を処理します。 リーダー オブジェクトは、インテリジェントなバッファー管理を使用して、可能な限りスムーズな再生を提供します。 アプリケーションでリーダー オブジェクトのネットワーク設定をより細かく制御する必要がある場合は、IWMReaderNetworkConfig インターフェイスと IWMReaderNetworkConfig2 インターフェイスを使用してこれらを使用できます。
ネットワーク ソースからのコンテンツは、次の 2 つのカテゴリのいずれかに分類されます。
- ストリーミング。 データは、ローカル コンピューターで再生される間に限り送信されます。 Windows Media サービスを実行しているサーバーは、ストリーミング データを提供できます。 複数のビット レート (MBR) コンテンツがストリーミングされる場合、クライアントはストリーミングの進行に応じてサーバーから異なるビット レートを要求できます。
- ダウンロード。 すべてのデータは、ローカル コンピューター上のファイルとして保存できるように、可能な限り迅速に送信されます。 Web サーバーは、ダウンロードしたデータを提供します。 ダウンロードの開始後、クライアントからサーバーへの通信はありません。
リーダー オブジェクトは、Web サーバーからファイルをダウンロードするときに、プログレッシブ ストリーミングと呼ばれる手法を使用します。これにより、プレーヤーはダウンロードが完了する前にコンテンツのレンダリングを開始できます。 データは、プレーヤーへの中断のないデータ フローを提供するためにバッファーされます。 コンテンツの転送速度や期間などの情報は、データをプレーヤーに提供する前にバッファーに格納する時間を決定するために使用されます。
ネットワーク経由でファイルまたはストリームを開くには、リーダー オブジェクトの IWMReader::Open メソッドを適切な URL で呼び出します。 Open は非同期呼び出しであるため、すぐにが返されます。 ソースを読み取る準備ができたら、リーダー オブジェクトはアプリケーションの IWMStatusCallback::OnStatus コールバック メソッドにWMT_OPENED通知を送信します。 この時点で、アプリケーションは IWMReaderAdvanced2::GetPlayMode を呼び出して、リーダーに配信モードのクエリを実行できます。 ネットワーク コンテンツの場合、このメソッドは、ダウンロードされたコンテンツを示すWMT_PLAY_MODE_DOWNLOAD、またはストリーミング されたコンテンツを示すWMT_PLAY_MODE_STREAMINGを返します。
ファイルまたはストリームの読み取りを開始するには、 IWMReader::Start メソッドを 呼び出します。 閲覧者は、コンテンツのバッファー処理を開始したときにWMT_BUFFERING_START通知を送信し、バッファー処理が完了するとWMT_BUFFERING_STOP通知を送信します。 閲覧者がコンテンツ (つまり、これら 2 つの通知の間) をバッファリングしている間に、バッファリングの進行状況をユーザーに表示できます。 IWMReaderAdvanced2::GetBufferProgress メソッドは、バッファーに格納されているデータの割合と残っている推定時間を返します。 ダウンロードしたコンテンツの場合は、 IWMReaderAdvanced2::GetDownloadProgress を 呼び出してダウンロードの進行状況を取得することもできます。 バッファー処理が完了するまで、これらのメソッドを繰り返し呼び出してディスプレイを更新します。 バッファリングは、ネットワークの輻輳などの要因により、再生中に再び発生する可能性があります。 この場合、アプリケーションは別のWMT_BUFFERING_START通知を受け取ります。
リーダー オブジェクトは、コンテンツの再生を開始すると、WMT_STARTED通知を送信します。 各サンプルがデコードされ、レンダリングに使用できるようになると、リーダーは IWMReaderCallback::OnSample コールバック メソッドを介してアプリケーションに渡します。 この時点で、プロセスはローカル ファイルの再生の場合と同じです。 再生が停止すると、リーダーはWMT_END_OF_STREAMING通知を送信します。
関連トピック