封装格式 -- MP4

本文详细介绍了MP4的格式,包括其发展历史、在线分析工具和MPEG-4协议。重点解析了MP4文件中的Box结构,如STBL、Stsd、Stts、Ctts、Stss等,以及如何计算关键参数,如trak box类型、播放时长、分辨率、帧率、音频采样率等。此外,还提供了如何识别MP4文件、Box类型和codec type的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

MP4,又称为MPEG-4 Part 14,是一种多媒体容器格式(container),扩展名为.mp4

发展历史

  • 2001年,apple的QuickTime格式,.qt和.mov的后缀名。
  • 2001年,MPEG-4 Part1,把基于QuickTime的box布局的容器格式添加到了MPEG-4标准。
  • 2004年,MPEG-4标准文档把编码和容器格式分开为两部分进行说明。
    MPEG-4 Part12:定义了容器格式通用的box结构,即ISO基本媒体文件格式(ISO base media file format, ISOBMFF)。
    MPEG-4 Part14:基于Part12进行了细化,是对Part-12的一种实现,定义了用于存储MPEG-4内容的容器格式,即.mp4格式。
    两者间的关系:
    MPEG-4 part12和part14关系

MP4在线分析工具

  1. mp4parser
    界面如下:
    mp4parser界面
  2. onlinemp4parser
    界面如下:
    onlinemp4parser

MPEG-4

MPEG-4协议中不同部分描述的对象:
MPEG-4


MP4解析

MP4文件中,媒体信息储存在“moov”的box中,一个moov通常包含若干个track信息,每个track都是一个随时间变化的媒体序列,Track里面基本时间单位为sample,sample是按照时间顺序排列,为了方便存取,若干个sample会被组织成一个chunk;而媒体数据存储在mdat box中,即sample是存储在mdat box中。如下图为sample和chunk关系:
在这里插入图片描述

重要概念

Box

MP4文件有若干个box组成。
下图为box的内部结构图:
box内部结构
可以看到:

  1. Box由header和body组成,header大小为8 bytes, 主要有size和type两个栏位。
    size: 是包含box header的整个box的大小。
    !! 两种特殊情况:
    当size为1,则表示box长度超出4字节表示范围,就会用largesize(8 bytes)来表示box大小。
    当size为0,表示该box为文件的最后一个box,这种情况只存在“mdat”类型的box中。
    
    type: 通常是4个ASCII码的字符如“ftpy”,“moov”。这些box type都是mp4 spec已经预定义好的,表示特定的含义。
    如果是“uuid”,表示该box是用户自定义的拓展类型
    
  2. 规范还定义了一种Fullbox,Fullbox是box的扩展。header中加入了1字节的version和3字节的flags字段,整个header大小是12bytes。
    结构如下图:
    在这里插入图片描述
  3. box中可以嵌套box,这种box被称为container box,比如moov box。而ftyp box不是container box,因为没有包含其它box。

Track

相同类型的sample的集合,对于媒体数据来说,一个track表示一个视频序列、一个音频序列或一个字幕序列。

Sample

Mp4中多媒体数据存储的最小单位。
video sample表示一帧或者一组连续的视频帧,audio sample表示一段连续的音频(也可以说是一帧音频帧)。

Chunk

一个track的几个sample组成的单元。


BOX详解

MP4文件由许多box组成,每个box包含不同信息,这些box以树型结构的方式组织。如下图:
在这里插入图片描述
可以看到在根节点之下,主要包含三个重要节点:ftypmoovmdat

  • ftyp:file type box,文件类型。描述本文件遵从的规范版本。
    内部结构为:
    aligned(8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值