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')框中。 示例说明框包含示例条目的列表。 对于每个示例条目,4 字节代码(类似于 FOURCC)定义格式结构。
MPEG-4 文件接收器可以生成以下格式的示例说明框:
- H.264/AVC 视频
- AAC 音频
- MP3 音频
对于其他格式,必须在每个流的媒体类型中提供示例说明框。 若要指定示例说明框,请在媒体类型上设置以下属性:
| Attribute | Description |
|---|---|
| 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 和 PPS NALU 一起提供。 通过设置 MF_MT_MPEG_SEQUENCE_HEADER 属性在媒体类型中指定此信息。 特性的值是 H.264 序列标头。 序列标头必须包含由 3 字节或 4 字节起始代码分隔的 SPS 和 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 属性。 如果存在,则此属性为在WAVEATEX 结构(即 wfx 成员之后)之后出现的 HEAACWAVEINFO 结构部分。 随后是 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 文件接收器使用 objectTypeIndication = 0x6b MPEG-1 音频的“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 仅在旋转角度根据“mvhd”中的旋转角度进行调整后,才为“tkhd”中的第一个视频轨道写入旋转角度(如果存在)。
Windows 8 MPEG-4 源和接收器支持电影片段(“moof”),但“mfra”不受支持。
Windows 8 MPEG-4 源支持 H.263。
MPEG-4 源现在以 MPEG-4 文件格式将两个四cc 的“h263”和“s263”映射到 MFVideoFormat_H263的媒体类型。
在 Windows 8 MPEG-4 源中添加了对 MJPEG 的更多四cc 支持。
MPEG-4 源将“dmb1”的 foucc 映射到 MFVideoFormat_MJPG的媒体类型。
在 Windows 8 MPEG-4 源中添加了 Furigana 元数据支持。
MPEG-4 源从“soal”、“soar”、“soaa”、“sonm”和“soco”读取 Furigana 元数据。 IPropertyStore 通过相应的 PKEY 集读取 Furigana 元数据。
下表显示了 shell 规范名称、属性键和 MPEG-4 文件格式的 box/tag ID 之间的映射。
领域 属性键 标记/框 ID System.Music.AlbumTitleSortOverride PKEY_Music_AlbumTitleSortOverride soal System.Music.ArtistSortOverride PKEY_Music_ArtistSortOverride 飙升 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 源集MF_NALU_LENGTH_SET MFVideoFormat_H264或MFVideoFormat_h264的输出媒体类型。 它为每个输出样本设置 MF_NALU_LENGTH_INFORMATION blob,其中四字节 NALU 长度用于一个压缩的样本中的不同 NALU。
在 MP4 源中添加了对 MPEG2 ADTS 音频的支持。
要求
| Requirement | 价值 |
|---|---|
| 支持的最低客户端 |
Windows 7 [仅限桌面应用] |
| 支持的最低服务器 |
Windows Server 2008 R2 [仅限桌面应用] |
另请参阅