MPEG-4 ファイル シンク

MP4 ファイルは MPEG-4 ファイル シンクによって作成されます。 MP4 ファイル形式の詳細については、次の標準に関するドキュメントを参照してください。

  • ISO/IEC 14496-12: Information technology -- Coding of audio-visual objects -- Part 12: ISO Base Media File Format
  • ISO/IEC 14496-14: Information technology -- Coding of audio-visual objects -- Part 14: MP4 File Format

Note

(これらのリソースは、一部の言語および国では利用できない場合があります。)

 

MPEG-4 ファイル シンクでは、エンコード機能をカプセル化しません。

MPEG-4 ファイル シンクを作成するには、MFCreateMPEG4MediaSink を呼び出します。 MPEG-4 ファイル シンクでは、QueryInterface を通じて次のインターフェイスを公開します。

サンプルの説明ボックス

MP4 は拡張可能コンテナー形式です。 MP4 仕様には、MP4 コンテナー内のメディアの種類を記述するための固定構造は定義されていません。 代わりに、各形式のカスタム構造を定義できるようにする、オブジェクト階層が定義されています。 形式の説明は、各ストリームのサンプルの説明 ("stsd") ボックスに保存されます。 サンプルの説明ボックスには、サンプル エントリの一覧が含まれています。 サンプル エントリごとに、FOURCC と似た 4 バイト コードによって形式構造が定義されます。

MPEG-4 ファイル シンクでは、次の形式でサンプルの説明ボックスを生成できます。

  • H.264/AVC ビデオ
  • AAC オーディオ
  • MP3 オーディオ

その他の形式では、各ストリームのメディアの種類でサンプルの説明ボックスを指定する必要があります。 サンプルの説明ボックスを指定するには、メディアの種類に次の属性を設定します。

属性 説明
MF_MT_MPEG4_SAMPLE_DESCRIPTION サンプルの説明ボックスがバイナリ BLOB として含まれています。
MF_MT_MPEG4_CURRENT_SAMPLE_ENTRY サンプルの説明ボックスのどのサンプル エントリが現在アクティブであるかを指定します。 (省略可能)
現時点では、値は 0 である必要があります。

 

すべてのデータがエンコードされるまで、サンプルの説明ボックスを生成できない場合があります。 たとえば、平均ビット レートなどの情報が事前に把握されないことがあります。 その場合は、MPEG-4 ファイル シンクの IMFMediaTypeHandler インターフェイスを使用してメディアの種類を更新できます。 これは、メディア シンクが最終処理される前に行う必要があります。

通常、メディアの種類はアップストリーム エンコーダーによって作成されます。 このエンコーダーでは、ストリーミング中に動的形式変更によって新しいメディアの種類を生成できます。 詳細については、動的形式変更に関する記事を参照してください。

H.264/AVC ビデオ

MPEG-4 ファイル シンクでは、ISO/IEC 14496 パート 15 セクション 5.1 で定義されているように、サンプルの説明ボックスにシーケンス パラメーター セット (SPS) とピクチャ パラメーター セット (PPS) の NALU が含まれる、基本ビデオ ストリームを持つ AVC ストリームのバージョンをサポートしています。 ファイル シンクでは、SPS/PPS の NALU を別のパラメーターセット基本ストリームとして保存する、代替の方法はサポートしていません。

MPEG-4 ファイル シンクではサンプルの説明ボックスを生成できますが、SPS と PPS の NALU が提供される必要があります。 この情報は、MF_MT_MPEG_SEQUENCE_HEADER 属性を設定して、メディアの種類に指定します。 この属性の値は H.264 シーケンス ヘッダーです。 シーケンス ヘッダーは、3 バイトまたは 4 バイトの開始コードで区切られた SPS および PPS の NALU で構成されている必要があります。

必要に応じて、ファイル シンクを構成するときに、初期のメディアの種類から MF_MT_MPEG_SEQUENCE_HEADER 属性を省略できます。 その場合は、後で、シーケンス ヘッダーを含めるようにメディアの種類を更新する必要があります。

MPEG-4 ファイル シンクには、AVC ビットストリームに関して次の要件があります。

  • ビットストリームは、H.264 Annex B の形式仕様に準拠している必要があります。 特に、NALU は 3 バイトまたは 4 バイトの開始コードで区切る必要があります。
  • メディア サンプルには、1 回の提示時間に対応する、すべてのスライスとデータの NALU が含まれている必要があります。
  • B フレームを MP4 ファイルに書き込む場合は、提示のタイム スタンプとデコードのタイム スタンプの両方を設定する必要があります。 ストリームに B フレームがあり、デコードのタイム スタンプが設定されていない場合、MP4 ライターに表示されるフレーム時間が逆に進み、フレームがドロップされます。

AAC Audio

AAC オーディオの場合、MPEG-4 ファイル シンクでは、次のサブタイプでサンプルの説明ボックスを生成できます。

  • MFAudioFormat_AAC
  • MEDIASUBTYPE_RAW_AAC1

これらのサブタイプの詳細については、AAC メディアの種類に関する記事を参照してください。

MFAudioFormat_AAC サブタイプの場合、メディアの種類には必要に応じて MF_MT_USER_DATA 属性が含まれます。 存在する場合、この属性は、WAVEFORMATEX 構造体の後 (つまり、wfx メンバーの後) にある HEAACWAVEINFO 構造体の一部です。 この後に、ISO/IEC 14496-3 で定義されているように、AudioSpecificConfig() データが続きます。 MF_MT_USER_DATA 属性が存在しない場合、ストリームは AAC 低複雑度 (LC) プロファイルであると見なされ、MPEG-4 ファイル シンクによって適切なサンプルの説明ボックスが生成されます。

MEDIASUBTYPE_RAW_AAC1 サブタイプの場合、メディア シンクには MF_MT_USER_DATA 属性が含まれている必要があり、この属性には AudioSpecificConfig() データが含まれている必要があります。

MPEG-4 ファイル シンクでは、objectTypeIndication = 0x40 である "mp4a" サンプル エントリを使用して、AAC のサンプルの説明ボックスの MPEG-4 バリエーションを作成します。 MPEG-2 のオブジェクトの種類は使用されません。

MP3 オーディオ

MP3 オーディオの場合、MPEG-4 ファイル シンクでは、標準のオーディオ メディアの種類からサンプルの説明ボックスを生成できます。 (「オーディオ メディアの種類」を参照してください。)

MPEG-4 ファイル シンクでは、MPEG-1 オーディオに対して objectTypeIndication = 0x6b である "mp4a" サンプル エントリを使用して、MP3 のサンプルの説明ボックスの MPEG-4 バリエーションを作成します。

制限事項

  • 作成されるファイルの最大サイズは 4 GB です。 Windows 8 では、4 GB を超えるファイルがサポートされます。
  • MPEG-4 ファイル シンクでは、編集リスト ("edts" および "'elst" ボックス) をサポートしていません。

MPEG-4 ソースとシンクに対する Windows 8 の更新情報

  • Windows 8 MPEG-4 のソースとシンクで回転読み取りおよび書き込みのサポートが追加されました。 これは、Windows 7 MPEG-4 のソースとシンクではサポートされていません。

    MPEG-4 ソースでは、アクティブなビデオ トラックの回転角度を、"mvhd" から、および "tkhd" からの回転角度の合計として読み取ります。

    Microsoft MPEG-4 シンクでは、"tkhd" に回転角度を書き込みますが、"mvhd" には 0 度 (ID) マトリックスを書き込みます。 Microsoft MPEG-4 シンクでは、単一のビデオ トラックのみをサポートすることに注意してください。

    IPropertyStore では、最初のビデオ トラックのみの回転角度を、"mvhd" から、および "tkhd" からの回転角度の合計として読み取ります。

    IPropertyStore では、"mvhd" の回転角度 (存在する場合) に従って回転角度が調整された後、"tkhd" に最初のビデオ トラックのみの回転角度を書き込みます。

  • ムービー フラグメント ("moof") は Windows 8 MPEG-4 のソースとシンクでサポートされますが、"mfra" はサポートされません。

  • H.263 は、Windows 8 MPEG-4 ソースでサポートされます。

    MPEG-4 ソースでは、MPEG-4 ファイル形式の "h263" と "s263" の 2 つの fourcc を MFVideoFormat_H263 のメディアの種類にマップするようになりました。

  • Windows 8 MPEG-4 ソースで MJPEG に対してより多くの fourcc のサポートが追加されました。

    MPEG-4 ソースでは、"dmb1" の foucc を MFVideoFormat_MJPG のメディアの種類にマップします。

  • Windows 8 MPEG-4 ソースで、ふりがなメタデータのサポートが追加されました。

    MPEG-4 ソースでは、"soal"、"soar"、"soaa"、"sonm"、"soco" からふりがなメタデータを読み取ります。 IPropertyStore では、対応する PKEY セットを通じてふりがなメタデータを読み取ります。

    次の表は、MPEG-4 ファイル形式でのシェルの正規名、プロパティ キー、ボックス/タグ ID の間のマッピングを示しています。

    フィールド プロパティ キー タグ/ボックス ID
    System.Music.AlbumTitleSortOverride PKEY_Music_AlbumTitleSortOverride soal
    System.Music.ArtistSortOverride PKEY_Music_ArtistSortOverride soar
    System.Music.AlbumArtistSortOverride PKEY_Music_AlbumArtistSortOverride soaa
    System.TitleSortOverride PKEY _TitleSortOverride sonm
    System.Music.ComposerSortOverride PKEY_Music_ComposerSortOverride soco

     

  • Windows 8 MPEG-4 ソースでステレオ 3D アトムのサポートが追加されました。

  • Windows 8 MPEG-4 のソースとシンクで AC3 と DD+ のサポートが追加されました。

  • 非フラグメント MP4 では、4 GB を超えるファイルが Windows 8 MPEG-4 シンクでサポートされます。

  • スクラブが、Windows 8 MPEG-4 ソースで最適化されています。

    待機時間を短縮するために、特定のシーク位置での最も近い 2 つのキー フレームの情報が、IMFSeekInfo::GetNearestKeyFrames を通じて公開されます。 キー フレームには依存フレームがないため、1 つのフレームのみをデコードした後にフレームが表示されます。 IMFGetService::GetService を使用して、メディア ソース、パイプライン、またはアプリケーションを介してこのインターフェイスを取得します。

    MPEG-4 ソースでレートをゼロに設定します。 パイプラインがスクラブ モードの場合、レートはゼロです。

  • SPS と PPS は、MPEG-4 シンクのサンプル データに保存できます。

    SPS と PPS を入力サンプル (H.264 ビデオ データ) と共に保存できるように、MPEG-4 シンクの MF_MPEG4SINK_SPSPPS_PASSTHROUGH 属性が定義されます。 生成された mp4 クリップは、Windows 7 MPEG-4 ソースなどで再生できます。

  • SPS と PPS は、MPEG-4 シンクの入力サンプルから抽出できます。

    MPEG-4 シンクの入力メディアの種類で MF_MT_MPEG_SEQUENCE_HEADER を通じて SPS と PPS が設定されない場合、MPEG-4 シンクでは入力サンプルから SPS と PPS を抽出しようとします。 MPEG-4 シンクでは、最初の SPS と PPS が見つかるまで入力サンプルをすべて無視します。SPS と PPS のないすべての入力サンプルはデコードできないからです。

  • 非フラグメント MP4 では、AVC 構成レコード内の 3D 情報がサポートされます。

  • H.264 VLD DXVA デコードを最適化するために、H.264 圧縮サンプルの NALU の長さが公開されます。

    MPEG-4 ソースでは、MFVideoFormat_H264 または MFVideoFormat_h264 の出力メディアの種類で MF_NALU_LENGTH_SET を設定します。 1 つの圧縮サンプル内の複数の異なる NALU に 4 バイトの NALU 長を使用して、各出力サンプルに MF_NALU_LENGTH_INFORMATION の BLOB を設定します。

  • MP4 ソースで MPEG2 ADTS オーディオのサポートが追加されました。

要件

要件 Value
サポートされている最小のクライアント
Windows 7 [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows Server 2008 R2 [デスクトップ アプリのみ]

関連項目

メディアのソースおよびシンク

メディア シンク

メディア ファンデーションでの MPEG-4 のサポート

メディア ファンデーションでサポートされるメディア形式