ネットワーク ソースの機能

ネットワーク ソースは、ストリーミング メディア ファイルの基本実装を提供し、 IMFMediaSource インターフェイスを公開します。 特定のネットワーク ソースの実装は、RTSP や HTTP などのソースを開くために使用されるプロトコルによって異なります。 プロトコル固有のネットワーク ソースによって、基本的なネットワーク機能が拡張されます。 サポートされているスキームとプロトコルの詳細については、「 サポートされているプロトコル」を参照してください。

ネットワーク ソース:

  • キャッシュ、プロキシ検出、自動再接続などの機能を実装します。
  • ソース リゾルバーからのプロトコルに依存しない呼び出しをプロトコル固有の呼び出しに変換します。
  • ソケット 層とオペレーティング システムと対話します。 SDP の説明を解析し、それを構成データとして使用し、基になるソケット レイヤーからストリーム データを読み取ります。 受信時に、ネットワーク ソースはパケットの再送信を並べ替えて要求する役割を担います。

ネットワーク ソースの作成

ネットワークからソースのメディア ソースを作成することは、ローカル ファイルのメディア ソースと変わるものではありません。 アプリケーションは、ソースの URL を IMFSourceResolver::CreateObjectFromURL や IMFSourceResolver::BeginCreateObjectFromURL などの Source Resolver メソッドに渡し、MF_RESOLUTION_MEDIASOURCE フラグを指定します。 このフラグの使用の詳細については、「 ソース リゾルバーの使用」を参照してください。

アプリケーションによって提供されるスキームに応じて、ソース リゾルバーは適切なスキーム ハンドラー オブジェクトを読み込み、 IMFSchemeHandler インターフェイスを公開します。 また、アプリケーションはスキーム ハンドラーを直接使用して、 IMFSchemeHandler::BeginCreateObject を呼び出してネットワーク ソースを作成することもできます。

詳細については、「 スキーム ハンドラー」と「Byte-Stream ハンドラー」を参照してください。

Media Foundation では、ネットワーク ソースのバイト ストリームはサポートされていません。 バイト ストリーム オブジェクトは、ダウンロードしたコンテンツ シナリオでのみサポートされます。 すべてのデータは、ローカル コンピューター上のファイルとして保存できるように、可能な限り迅速に送信されます。 Web サーバーは、ダウンロードしたデータを提供します。 ダウンロードの開始後、クライアントからサーバーへの通信はありません。 この場合、HTTP ダウンロード プロトコルが使用されます。

"http:"、"mms:"、または "rtsp:" スキームのバイト ストリーム オブジェクトを作成するようにアプリケーションがソース リゾルバーに要求した場合、呼び出しはMF_E_UNSUPPORTED_SCHEME エラーで失敗します。

注意

Windows 7 では、ネットワーク ソースは Windows Media Station ファイル (.NSC)。 これらのファイルは、ネットワーク経由のメディア コンテンツのマルチキャスト ストリーミングで使用されます。 指定した のネットワーク ソースを作成するには。NSC ファイルでは、アプリケーションでソース リゾルバーを使用する必要があります。

 

アプリケーションがスキーム ハンドラーを使用している場合、非同期呼び出しは dwFlags パラメーターを無視し、完了時にネットワーク ソースへのポインターを返します。

次の図は、ネットワーク ソースを使用したメディア ストリーミングのデータ フローを示しています。

ネットワーク ソースとメディア セッションの間のループを含む、アプリケーションからストリーミング サーバーへのパスを示すフロー チャート

ネットワーク ソースの構成

このトピックでは、ネットワーク ソースでサポートされる機能と、関連する構成オプションについて説明します。 アプリケーションは、ネットワーク ソース オブジェクトの作成時にネットワーク ソースを構成できます。 これらのオプションは IPropertyStore オブジェクトに格納されます。このオブジェクトは、アプリケーションがソース リゾルバー メソッドまたは IMFSchemeHandler::BeginCreateObjectpProps パラメーターを渡す必要があります。

自動再接続

ネットワーク ソースの自動再接続機能を使用すると、サーバーへの TCP 接続が失敗するか、クライアントがパケットを受信できない場合に、クライアントがメディア サーバーに自動的に再接続できます。 接続に失敗すると、ネットワーク ソースは、前の接続で使用されていたのと同じ構成を使用してメディア サーバーへの再接続を試みます。 再接続プロセスは非同期です。 ネットワーク ソースは、再接続の開始時に MEReconnectStart イベントを発生させ、再接続が成功または失敗したときに MEReconnectEnd イベントを発生させます。

再接続の試行回数が 、MFNETSOURCE_AUTORECONNECTLIMIT プロパティで指定された最大値を超えた場合、再接続操作は取り消されます。 再接続の試行回数は、 MFNETSOURCE_AUTORECONNECTPROGRESS プロパティに格納されます。

自動再接続により、メディア サーバーへの TCP 接続が失敗した場合でも、メディア コンテンツをスムーズに再生できます。 スムーズな再生エクスペリエンスを実現するには、クライアントが再接続するまで再生を続行するために、キャッシュに少なくとも 1 ~ 2 分の十分なデータが必要です。 ネットワーク ソースがバッファーに格納できるデータの最大量は、 MFNETSOURCE_MAXBUFFERTIMEMS プロパティで設定できます。

高速ストリーミング

ネットワーク ソース クライアントは、コンテンツのビット レートで指定された速度よりも高速な速度で、コンテンツの先頭にあるデータの一部をストリーミングするようにサーバーに要求します。 サーバーで 高速スタートアップ が有効になっている場合、クライアントがリアルタイムよりも速く十分な量のデータをバッファーに格納できるように、高速ビット レート ストリームがサーバーから送信されます。 これにより、クライアント コンピューターやネットワークの低速、使用可能な帯域幅など、さまざまな要因によって発生する可能性がある初期バッファリングの遅延を最小限に抑えることで、ユーザー エクスペリエンスが向上します。

クライアントが要求できる高速ストリーミング データの量を指定するには、 MFNETSOURCE_ACCELERATEDSTREAMINGDURATION プロパティを設定します。 ネットワーク ソースがトランスポート プロトコルとして UDP を使用している場合は、代わりに MFNETSOURCE_MAXUDPACCELERATEDSTREAMINGDURATION プロパティを設定して、高速ストリーミング データの最大量を指定します。

クライアントでの高速ストリーミングは、 高速キャッシュ 機能を使用して行うこともできます。リアルタイムよりも高速にオンデマンド コンテンツをストリーミングし、クライアントのローカル キャッシュにデータをキャッシュします。 この種類の高速ストリーミングを使用するには、ネットワーク ソースで高速キャッシュを有効にする必要があり、サーバーで高速キャッシュをサポートする必要があります。 クライアントがサーバーにコンテンツを要求すると、ネットワーク ソースはまず、コンテンツがクライアントのキャッシュに既にあるかどうかを確認します。 コンテンツがクライアントのローカル キャッシュにあり、有効期限が切れていない場合は、レンダリングされます。 コンテンツがローカル キャッシュにない場合、または既に有効期限が切れている場合、コンテンツはストリーミングされてキャッシュされ、ネットワーク ソースはローカル キャッシュからコンテンツを再生します。 後続の要求では、プレイリストの場合、不足しているエントリのみがキャッシュされ、再生されます。 プレイリスト エントリがクライアントのローカル キャッシュに既に存在する場合は、そこから再生され、再びキャッシュされません。

既定では、ネットワーク ソース クライアントで高速キャッシュが有効になっています。 ただし、機能を使用するかどうかは、次の要因によっても決まります。

  • クライアントは、通常の速度よりも速くコンテンツをダウンロードしてキャッシュするために、追加の帯域幅を使用できる必要があります。
  • クライアントには十分なディスク領域が必要です。 要求されたオンデマンド コンテンツをキャッシュした後、クライアントの空きディスク領域が 100 MB 未満の場合は、キャッシュされませんが、ストリーミングされて同時にレンダリングされます。

高速キャッシュ機能は、 MFNETSOURCE_CACHEENABLED プロパティによって制御されます。

バッファー管理

ネットワーク ソースは、クライアントのバッファー状態を監視する効率的なバッファー管理を提供します。 既定では、ネットワーク ソースは起動時に 5 秒のデータをバッファーします。 この値は、 MFNETSOURCE_BUFFERINGTIME プロパティを設定することで構成できます。 このプロパティ値に基づいて、ネットワーク ソースは、メディア コンテンツのスムーズで中断のない再生を確保するのに十分なバッファー サイズを計算します。 このプロパティが 0 に設定されている場合、バッファー管理は無効になります。 バッファー内のコンテンツの量が少ない場合、ネットワーク ソースはバッファリングを開始し、バッファリングが開始されたことを示す MEBufferingStarted イベントを発生させます。 このイベントを受信すると、パイプラインのレンダリングが停止します。 バッファリングが完了すると、ネットワーク ソースによって MEBufferingStopped イベントが発生し、クライアントは再びレンダリングを開始できます。

クライアントは、最初のサンプルのバッファー サイズによって示されるデータの量を累積した後、コンテンツのレンダリングを開始します。 この値が計算されたバッファー サイズより小さい場合、再生はすぐに開始されます。 この動作は、高速スタートアップ機能とよく似ています。

MFNETSOURCE_MAXBUFFERTIMEMS プロパティには、バッファーに格納できるデータの最大量が格納されます。

帯域幅の選択

クライアントがメディア サーバーに接続すると、接続設定の一環として、ネットワーク ソースは 静的なパケット ペア 測定を実行して、クライアントとサーバー間の初期リンク帯域幅を推定します。 この測定の結果に基づいて、クライアントは推定帯域幅内に収まるオーディオストリームとビデオストリームを選択できます。 これにより、ストリーミング メディア コンテンツのスムーズな再生が保証されます。

高速スタートアップ段階では、 動的なパケットペア 測定が実行されます。 このプロセスでは、クライアントは大量のデータを受信します。これは、複数のパケットまたはサンプルにすることができます。

動的パケットペア測定の結果は、静的パケットペア測定によって返されるリンク帯域幅推定値よりも正確です。これは、静的パケットペアプロセスが固定サイズの単一のパケットを送信するため、高帯域幅ネットワークでは正確な結果が得られない可能性があるためです。

アプリケーションは、 MFNETSOURCE_PPBANDWIDTH プロパティを使用して推定帯域幅を取得できます。

ネットワーク状態が動的に変化し、ネットワーク ソースの再生に不具合が発生する可能性があります。 ネットワーク ソースは、受信レートとバッファーの状態に基づいて、クライアントの初期ストリーム選択を変更できます。 たとえば、ネットワークの輻輳時にクライアントが低いビット レートに切り替え、ネットワーク トラフィックが改善され、クライアントが十分な量のバッファーコンテンツを蓄積した場合に、より高いビット レートに切り替えることができます。

Media Foundation でのネットワーク