MP4格式解析

MP4由一系列的box组成,每一个box存放了不同的数据,box里面还可以嵌套box。最外层主要有三个box,分别是ftyp box、moov box和mdat box。其中最重要最复杂的就是moov box了,里面存放了音视频的基本信息和每一个音视频数据的具体位置。

box header

MP4总体box分布

ftyp box

ftyp box放在MP4文件的开始,用来表示文件类型。

mdat box

mdat box是音视频数据存放的地方,mdat box基本由头部和数据俩部分组成,box type是“mdat”的ASCII码值。对于H264来说,是一个个NALU,这里的NALU不再包含SPS和PPS,这些数据已经放到了moov box里面,这个的NALU类型是图像数据或者SEI数据

moov box

moov box用来存放Metadata信息。里面会一层层嵌套很多层box。总体嵌套逻辑就是movie里面是track,track里面是sample,多个sample组成了一个个chunk。

  • sample:视频的一帧和音频的一段编码数据称之为一个sample
  • chunk:连续几个sample称之为chunk
  • track:视频所有的sample或者音频所有的sample组成track

moov box主要包含以下2种类型的box

  • moov box首先有一个mvhd box主要存放文件的基本信息,比如MP4文件的创建时间、时间单位、总时长等信息。
  • 音频和视频各有一个trak box。具体是音频trak还是视频trak,会在trak box中的mdia box里面的hdlr box表示出来。

trak box主要包含以下2种类型的box

  • tkhd box主要表示track的一些基本信息,比如视频的宽、高。音频的音量信息等。
  • mdia box,是媒体信息box。包含了3个子box,一个是mdhd box,一个是hdlr box,一个是minf box这个box包含了sample的很多信息,这些信息是找到并使用音频和视频数据的关键。

mdia box主要包含以下3种类型的box

  • mdhd box包含了时间单位time scale,这个时间单位是sample的时间戳单位,控制播放速度和音视频同步都用这个值。
  • hdlr box主要包含了track的类型信息,表明是音频还是视频track。
  • minf box里面包含了stbl box,里面存放着可以计算得到每一个chunk的偏移地址、每一个sample在文件中的地址信息和大小、每一个sample的时间戳和每一个视频IDR帧的地址信息

minf box放置的关键box

  • stts box放置每一个sample的时长,这个值是DTS。
  • ctts box放置CTS,就是每一个sample的PTS和DTS的差值。
  • stss box放置的是那些sample是关键帧。
  • stsc box放置的是sample到chunk的映射表。
  • stco box或者co64 box放置每个chunk在文件中的偏移位置。
  • stsz box放置每一个sample的大小。

文章来自多方面的学习积累,请各位大佬指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值