次の方法で共有


ネットワーク ソース機能

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

ネットワーク ソース:

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

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

ネットワークからソースのメディア ソースを作成することは、ローカル ファイルのメディア ソースと同じではありません。 アプリケーションは、ソースの URL をソース リゾルバー メソッド (IMFSourceResolver::CreateObjectFromURLIMFSourceResolver::BeginCreateObjectFromURL など) に渡し、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 オブジェクトに格納されます。このオブジェクトは、アプリケーションがソース リゾルバー メソッドの pProps パラメーターまたは IMFSchemeHandler::BeginCreateObjectを渡す必要があります。

自動再接続

ネットワーク ソースの自動再接続機能を使用すると、サーバーへの 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 ネットワーク