MPEG-4 文件接收器

MPEG-4 文件接收器创建 MP4 文件。 有关 MP4 文件格式的详细信息,请参阅以下标准文档:

  • ISO/IEC 14496-12:信息技术 -- 音频-视觉对象的编码 -- 第 12 部分:ISO 基础媒体文件格式
  • ISO/IEC 14496-14:信息技术 -- 音频-视觉对象的编码 -- 第 14 部分:MP4 文件格式

注意

(这些资源在某些语言和国家/地区可能不可用。)

 

MPEG-4 文件接收器没有封装编码功能。

若要创建 MPEG-4 文件接收器,请调用 MFCreateMPEG4MediaSink 函数。 MPEG-4 文件接收器通过 QueryInterface 公开以下接口:

采样说明框

MP4 是可扩展的容器格式。 MP4 规范未定义用于描述 MP4 容器中的媒体类型的固定结构。 相反,它定义了一个对象层次结构,允许为每个格式定义自定义结构。 格式说明存储在每个流的示例说明 (stsd) 框中。 示例说明框包含示例条目的列表。 对于每个示例条目,一个类似于 FOURCC 的 4 字节代码定义了格式结构。

MPEG-4 文件接收器可为以下格式生成示例说明框:

  • H.264/AVC 视频
  • AAC 音频
  • MP3 音频

对于其他格式,必须在每个流的媒体类型中提供示例说明框。 若要指定示例说明框,请在媒体类型上设置以下属性:

Attribute 说明
MF_MT_MPEG4_SAMPLE_DESCRIPTION 包含示例说明框作为二进制 Blob。
MF_MT_MPEG4_CURRENT_SAMPLE_ENTRY 指定示例说明框中的哪个示例条目当前处于活动状态。 (可选。)
目前,该值必须为零。

 

在某些情况下,在对所有数据进行编码之前,无法生成示例说明框。 例如,可能无法提前知道平均比特率等信息。 在这种情况下,可以使用 MPEG-4 文件接收器上的 IMFMediaTypeHandler 接口更新媒体类型。 必须在完成媒体接收器之前完成此操作。

媒体类型通常由上游编码器创建。 该编码器可以通过动态格式更改,在流式传输期间生成新的媒体类型。 有关详细信息,请参阅动态格式更改

H.264/AVC 视频

MPEG-4 文件接收器支持具有基本视频流的 AVC 流的版本,其中序列参数集 (SPS) 和图片参数集 (PPS) NALU 包含在示例说明框中,如 ISO/IEC 14496 第 15 部分第 5.1 节中所述。 文件接收器不支持将 SPS/PPS NALU 存储为单独的参数-集基本流的备用方法。

MPEG-4 文件接收器可以生成示例说明框,但必须随 SPS NALU 和 PPS NALU 一起提供。 通过设置 MF_MT_MPEG_SEQUENCE_HEADER 属性在媒体类型中指定此信息。 该属性的值是 H.264 序列标头。 该序列标头必须包含由 3 字节或 4 字节起始代码分隔的 SPS NALU 和 PPS NALU。

(可选)配置文件接收器时,可以从初始媒体类型中省略 MF_MT_MPEG_SEQUENCE_HEADER 属性。 在这种情况下,必须稍后更新媒体类型以包含序列标头。

MPEG-4 文件接收器对 AVC 位流具有以下要求:

  • 位流必须符合 H.264 附件 B 的格式规范。 具体而言,NALU 必须用 3 字节或 4 字节起始代码分隔。
  • 媒体示例必须包含对应于单个呈现时间的所有切片和数据 NALU。
  • 将 B 帧写入 MP4 文件时,必须同时设置呈现时间戳和解码时间戳。 如果流具有 B 帧且未设置解码时间戳,MP4 编写器将看到帧时间向后移动,并将删除帧。

AAC 音频

对于 AAC 音频,MPEG-4 文件接收器可为以下子类型生成示例说明框:

  • MFAudioFormat_AAC
  • MEDIASUBTYPE_RAW_AAC1

有关这些子类型的详细信息,请参阅 AAC 媒体类型

对于 MFAudioFormat_AAC 子类型,媒体类型选择性地包含 MF_MT_USER_DATA 属性。 如果包含,则此属性是 HEAACWAVEINFO 结构中出现在 WAVEFORMATEX 结构后面(即 wfx 成员后面)的部分。 后面跟着的是 AudioSpecificConfig() 数据,由 ISO/IEC 14496-3 定义。 如果没有 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 audio 的 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 度(标识)矩阵。 请注意,Microsoft MPEG-4 接收器仅支持单个视频轨道。

    IPropertyStore 仅读取第一个视频轨道的旋转角度作为来自“mvhd”和“tkhd”的旋转角度之和。

    IPropertyStore 仅写入“tkhd”中第一个视频轨道的旋转角度,在此之前需要根据“mvhd”中的旋转角度(若存在)调整上述旋转角度。

  • Windows 8 MPEG-4 源和接收器支持电影片段(“moof”),但不支持“mfra”。

  • Windows 8 MPEG-4 源支持 H.263。

    MPEG-4 源现在以 MPEG-4 文件格式将两个 fourcc“h263”和“s263”映射到 MFVideoFormat_H263 的媒体类型。

  • 在 Windows 8 MPEG-4 源中添加了对 MJPEG 的更多 fourcc 支持。

    MPEG-4 源将“dmb1”的 foucc 映射到 MFVideoFormat_MJPG 的媒体类型。

  • 在 Windows 8 MPEG-4 源中添加了 Furigana 元数据支持。

    MPEG-4 源从“soal”、“soar”、“soaa”、“sonm”和“soco”读取 Furigana 元数据。 IPropertyStore 通过一组相应的 PKEY 读取 Furigana 元数据。

    下表显示了 MPEG-4 文件格式中 shell 规范名称、属性键和框/标记 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,Windows 8 MPEG-4 接收器支持大于 4 GB 的文件。

  • Windows 8 MPEG-4 源优化了清理功能。

    为了降低延迟,会通过 IMFSeekInfo::GetNearestKeyFrames 公开特定寻道位置的两个最接近的关键帧的信息。 由于关键帧没有依赖帧,因此它仅在解码一帧后呈现帧。 使用 IMFGetService::GetService 通过媒体源、管道或应用程序获取此接口。

    在 MPEG-4 源中将速率设置为零。 当管道处于清理模式时,速率为零。

  • SPS 和 PPS 可以存储在 MPEG-4 接收器中的示例数据中。

    定义了 MPEG-4 接收器上的 MF_MPEG4SINK_SPSPPS_PASSTHROUGH 属性,以允许 SPS 和 PPS 与输入样本(H.264 视频数据)一起保存。 生成的 mp4 剪辑可由 Windows 7 MPEG-4 源和其他源播放。

  • 可以从 MPEG-4 接收器中的输入样本中提取 SPS 和 PPS。

    如果未通过 MPEG-4 接收器的输入媒体类型上的 MF_MT_MPEG_SEQUENCE_HEADER 设置 SPS 和 PPS,MPEG-4 接收器将尝试从输入样本中提取 SPS 和 PPS。 MPEG-4 接收器会忽略任何输入样本,直到找到第一个 SPS 和 PPS,因为没有 SPS 和 PPS 的输入样本都无法解码。

  • 对于非碎片化 MP4,支持 AVC 配置记录中的 3D 信息。

  • 会为 H.264 压缩样本公开 NALU 长度,以优化 H.264 VLD DXVA 解码。

    MPEG-4 源在 MFVideoFormat_H264 或 MFVideoFormat_h264 的输出媒体类型上设置 MF_NALU_LENGTH_SET 它在每个输出样本上设置 MF_NALU_LENGTH_INFORMATION 的 Blob,其中 4 字节 NALU 长度用于一个压缩样本中的不同 NALU。

  • 在 MP4 源中添加了对 MPEG2 ADTS 音频的支持。

要求

要求
最低受支持的客户端
Windows 7 [仅限桌面应用]
最低受支持的服务器
Windows Server 2008 R2 [仅限桌面应用]

另请参阅

媒体源和接收器

媒体接收器

媒体基础中的 MPEG-4 支持

Media Foundation 中支持的媒体格式