次の方法で共有


ASF ストリームの作成と構成

各 ASF ファイルには、1 つ以上のストリームが含まれています。 ASF プロファイル オブジェクトは、ASF ストリームのコレクションを表します。 ASF エンコードの場合は、エンコードするストリームを作成して構成する必要があります。

アプリケーションは、ASF プロファイル オブジェクトを使用して次のタスクを実行できます:

  • ストリームを追加または削除します。
  • ストリームの構成設定を取得します。
  • ペイロード拡張機能を構成します。
  • ASF 相互除外オブジェクトを追加、削除、または変更します。

このトピックは、次のセクションで構成されています。

新しいストリームの作成

ASF プロファイル オブジェクトには、少なくとも 1 つの ASF ストリームの構成設定が含まれている必要があります。 各ストリームは、IMFASFStreamConfig インターフェイスを公開するストリーム構成オブジェクトによって表されます。 ストリーム構成オブジェクトの情報は、ASF ファイル ヘッダーのストリーム プロパティ オブジェクトと拡張ストリーム プロパティ オブジェクトに対応します。 (「ASF ファイル構造」を参照してください。)

ASF プロファイルにストリームを追加するには、次の手順に従います:

  1. 空のストリーム構成オブジェクトを作成します。
  2. アプリケーションの要件に従ってストリームを構成します。
  3. プロファイルにストリームを追加します。

プロファイルのストリームを作成するには、IMFASFProfile::CreateStream を呼び出して空のストリーム構成オブジェクトを作成し、ppIStream パラメーターでポインターを受け取ります。 CreateStream は、作成するストリームの種類を認識している必要があります。 ASF ファイルで使用されるストリームの最も一般的な種類は、オーディオ ストリームとビデオ ストリームです。 Media Foundation では、ストリームの種類は、IMFMediaType インターフェイスを公開するメディア型オブジェクトによって示されます。 メディアの種類の主要な種類は、オーディオやビデオなどのデジタル メディア ストリームのカテゴリを定義します。 サブタイプは、メジャー型の形式を定義します。 CreateStream によって設定された初期メディアの種類は、ストリーム構成オブジェクトを使用して変更できます。 ストリームのメディアの種類を取得するには、IMFASFStreamConfig::GetMediaType を呼び出すか、または IMFASFStreamConfig::GetStreamType を呼び出すメジャー型を取得します。 ストリームの初期メディアの種類は、IMFASFStreamConfig::SetMediaType を呼び出すことによって、新しく構成されたメディアの種類に置き換えることができます。

アプリケーションが MFCreateASFProfileFromPresentationDescriptor を呼び出して、有効なプレゼンテーション記述子からプロファイルを作成する場合。 この関数は、各ストリームのストリーム構成オブジェクトを自動的に設定し、プロファイルに設定します。 ストリーム メディアの種類は、プレゼンテーション記述子に関連付けられているストリーム記述子に基づいて設定されます。

ストリーム番号の割り当て

すべての型のストリームにはストリーム番号を割り当てる必要があります。 ストリーム番号はシーケンシャルである必要はありませんが、1 ~ 127 の範囲である必要があります。 ストリーム番号を割り当てるには、IMFASFStreamConfig::SetStreamNumber を呼び出します。 ストリーム番号を取得するには、IMFASFStreamConfig::GetStreamNumber を呼び出します。

Note

ストリーム番号は、IMFASFProfile::GetStream を使用してプロファイル内のストリームを取得するときに使用するストリーム インデックスとは異なります。 ストリーム インデックスは、プロファイル オブジェクトによってストリームに割り当てられた数値です。 ストリーム インデックスの範囲は、IMFASFProfile::GetStreamCount によって取得されたストリームの数より 0 から 1 未満です。 IMFASFProfile::GetStreamByNumber を呼び出して、ストリーム番号でプロファイルからストリームを取得することもできます。

 

漏れバケット値の設定

ストリームを表す各ストリーム構成オブジェクトには、リークバケットのパラメーター、ビット レート、バッファー ウィンドウの値が関連付けられている必要があります。

これらの値は、MF_ASFSTREAMCONFIG_LEAKYBUCKET1 属性と MF_ASFSTREAMCONFIG_LEAKYBUCKET2 属性を使用してアプリケーションで使用できます。 ファイル エンコードの場合、実際の値はエンコードの種類によって異なります。エンコーダーによって決まります。 エンコーダーが既に構成されていて、出力の種類がエンコーダーで設定されている場合、アプリケーションはエンコーダーに漏れバケット パラメーターのクエリを実行し、これらの属性の値を設定する必要があります。

パイプライン レイヤー コンポーネントを使用し、ASF メディア シンクのストリームを構成している場合は、ほとんどの場合、エンコーダーが構成されていません。 この場合は、エンコーダーポストメディアタイプネゴシエーションを照会し、ASF メディアシンクのプロパティストアの MFPKEY_ASFSTREAMSINK_CORRECTED_LEAKYBUCKET プロパティで更新された値を設定する必要があります。 エンコード プロパティ ストアは、プロファイルに関連付けられている ContentInfo オブジェクトを通じて取得されます。 更新された値は、ストリームのリークバケット属性値に自動的に反映されます。 漏れバケットに関する一般的な情報と、エンコーダーから漏れバケットの値を取得する方法については、「漏れバケット バッファー モデル」を参照してください。

ペイロード拡張機能

ストリームのメディア データは、ASF マルチプレクサー によって メディア サンプル として ASF データ オブジェクトに追加されます。 これらのメディア サンプルには、ペイロード拡張データ (SMPTE タイム コード データ、非正方形ピクセル縦横比、サンプル期間、サンプルに含まれている場合はビデオ キー フレーム) を含めることができます。 サポートされているペイロード拡張機能の種類の一覧については、「ASF ペイロード拡張 GUID」を参照してください。

サンプル生成中にマルチプレクサーがそのストリームの各サンプルに補助データを追加できるように、ペイロード拡張を受け入れるようにストリームを構成する必要があります。

ストリームに設定されているペイロード拡張機能の合計数を取得するには、IMFASFStreamConfig::GetPayloadExtensionCount を呼び出し、IMFASFStreamConfig::GetPayloadExtension を呼び出してリストを列挙します。 ストリームのペイロード拡張機能を追加するには、IMFASFStreamConfig::AddPayloadExtension を呼び出します。 これにより、ストリーム用に生成された個々のメディア サンプルに補助データが追加されます。

ストリームに関連付けられている既存のペイロード拡張機能を削除するには、IMFASFStreamConfig::RemoveAllPayloadExtensions を呼び出します。

プロファイルへのストリームの追加

ストリームが構成されたら、IMFASFProfile::SetStream を呼び出して、ストリームをプロファイルに追加します。

プロファイル内の既存のストリームを削除するには、IMFASFProfile::RemoveStream を呼び出します。

構成されたプロファイルは、IMFASFContentInfo::SetProfile を呼び出して ContentInfo オブジェクトに設定する必要があります。 既存のストリームに変更を加えた場合は、もう一度プロファイルに追加し、ContentInfo オブジェクトにプロファイルを設定する必要があります。

ASF プロファイル

メディア ファンデーションでの ASF のサポート

WMContainer ASF コンポーネント