サンプル拡張機能の種類

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

データ ユニット拡張機能 (DUEs) またはバッファー プロパティとも呼ばれるサンプル拡張機能は、ASF ファイルの data セクションのメディア サンプルに添付されているデータの項目です。 Windows Media Format SDK では、いくつかの種類のサンプル拡張機能が定義されています。 独自の拡張機能の種類を作成することもできます。

サンプル拡張機能を使用するには、プロファイルのストリーム構成データで拡張機能の種類を識別する必要があります。 IWMStreamConfig2::AddDataUnitExtension メソッドを呼び出して、拡張データを含むサンプルを受け入れるようにストリームを構成します。

INSSBuffer3::SetProperty メソッドを呼び出して、個々のサンプル拡張機能を入力サンプルに追加する必要があります。 サンプルを読み取るときに、 INSSBuffer3::GetProperty メソッドを呼び出して拡張データを取得できます。 また、INSSBuffer4 インターフェイスのメソッドを使用して、サンプルにアタッチされているデータユニット拡張機能を列挙することもできます。

次の表に、定義済みのデータ ユニット拡張識別子の一覧と、それぞれのサンプルに添付されているデータについて説明します。

拡張機能 GUID のサンプル 説明
WM_SampleExtensionGUID_OutputCleanPoint データは、サンプルが クリーンポイントであるかどうかを示します。 値 0 は、サンプルがクリーンポイントではないことを示します。 0 以外の値は、それがクリーンポイントであることを示します。 このサンプル データ ユニット拡張機能 (DUE) の種類は、サードパーティ製コーデックでエンコードされたプレ圧縮メディア ストリームを書き込む際に、クリーンポイントを追跡するために使用されます。
WM_SampleExtensionGUID_Timecode データは、サンプルに関連付けられた SMPTE 時間コード データを含む WMT_TIMECODE_EXTENSION_DATA 構造体です。この DUE のサイズは常にWM_SampleExtension_Timecode_Size(14 バイト)です。
WM_SampleExtensionGUID_FileName この種類のサンプル拡張機能は、ファイル ストリームに使用されます。 ファイル ストリーム サンプル内のデータは、データ ファイルの一部です。 サンプル拡張機能のデータは、サンプル内のコンテンツの取得元となるファイルの名前を指定します。ファイル名は、パス情報のない name.extension 形式のファイル名を含むワイド文字列です。
WM_SampleExtensionGUID_ContentType データは、サンプルに含まれるコンテンツの種類を識別します。 この種類のサンプル拡張機能は、インターレースされたビデオ ストリームで使用されます。インターレースされたすべてのコンテンツでは、ビットごとの OR によって組み合わされたWM_CT_INTERLACED フラグと、WM_CT_BOTTOM_FIELD_FIRST、WM_CT_TOP_FIELD_FIRST、またはWM_CT_REPEAT_FIRST_FIELDが使用されます。
フィールドの順序はエンコード プロセスでは使用されませんが、レンダリング ハードウェアに渡すことができるように、圧縮されたサンプルで維持されます。 インターレース コンテンツを正しくないフィールド順序で再生すると、ビデオ内のモーション ジッターなどのアーティファクトが発生します。
この DUE のサイズは常にWM_SampleExtension_ContentType_Size。
WM_SampleExtensionGUID_PixelAspectRatio データは、サンプル内のコンテンツのピクセル縦横比を示します。 これはビデオにのみ適用されます。この拡張の種類は、正方形以外のピクセルの縦横比を識別するために使用されます。 詳細については、「 正方形以外のピクセルでビデオ ストリームを読み書きするには」を参照してください。
縦横比の値は、低いバイトが X のアスペクトで、高いバイトが Y の側面を持つ単語として格納されます。 たとえば、16:9 は0x0910として格納されます。
この DUE のサイズは常にWM_SampleExtension_PixelAspectRatio_Sizeされ、これは 2 バイトです。
WM_SampleExtensionGUID_SampleDuration データは、バッファー オブジェクトに含まれるサンプルの期間をミリ秒単位で示します。 再生時に、この DUE が設定されている場合、リーダー オブジェクトはそれを使用して既存のサンプル期間の値を上書きします。この DUE は、ビットレートが 100 kbps 以上のビデオ ストリーム上の SDK ランタイム コンポーネントによって自動的に設定されます。この場合、DUE 情報のオーバーヘッドは重要ではありません。 ビット レートが 100 kbps 以下のストリームには設定されません。 (高ビット レート ストリーム上の) ライターによって値が独自のデータで上書きされるため、アプリケーションでこの DUE を手動で設定しないでください。
この DUE のサイズは常にWM_SampleExtension_SampleDuration_Sizeで、これは 2 バイトです。
WM_SampleExtensionGUID_ChromaLocation データは、I420 ビデオ形式で使用される彩度サブサンプリングの種類を示します。この拡張機能の値は、次のいずれかの値に設定されます。
  • WM_CL_INTERLACED420
  • WM_CL_PROGRESSIVE420
このデータ ユニット拡張機能は、プロファイルで構成されていません。 デコーダーからの出力サンプルに含まれています。
この DUE のサイズは常にWM_SampleExtension_ChromaLocation_Sizeで、これは 1 バイトです。
WM_SampleExtensionGUID_ColorSpaceInfo データは、現在のビデオ フレームに使用される色空間に関する情報を提供します。この拡張機能の値は 、WMT_COLORSPACEINFO_EXTENSION_DATA 構造体です。
このデータ ユニット拡張機能は、プロファイルで構成されていません。 デコーダーからの出力サンプルに含まれています。
この DUE のサイズは常にWM_SampleExtension_ColorSpaceInfo_Size(3 バイト)です。
WM_SampleExtensionGUID_UserDataInfo データはカスタム ユーザー データです。データの最初の 4 バイトには、カスタム データのサイズが含まれます。
次のバイトには、サンプル拡張機能で提供されるユーザー データの種類が含まれます。 次の種類がサポートされています。
  • 0x1F - シーケンス レベルのユーザー データ
  • 0x1E - エントリ ポイント レベルのユーザー データ
  • 0x1D - フレーム レベルのユーザー データ
  • 0x1C - フィールド レベルのユーザー データ
  • 0x1B - スライス レベルのユーザー データ
6 番目以降のバイトには、ユーザー データが含まれます。 ユーザー データのバイト数は、最初の 4 バイトの数値で指定した数だけ存在します。
このデータ ユニット拡張機能は、プロファイルで構成されていません。 デコーダーから出力されるサンプルに含まれています。
WM_SampleExtensionGUID_SampleProtectionSalt データはサンプルによって暗号化されます。 この拡張の種類のサンプルは、ASF 以外のファイル形式と Windows Media DRM 以外の権限保護スキームからインポートされるコンテンツに使用されます。保護されたコンテンツをインポートするときは、各サンプルに一意の塩を含める必要があります。 通常、この値は単調に増加するカウンターです。

プログラミング リファレンス