音视频开发---MP4格式详解

本文详细介绍了MP4文件格式,包括基本单元box(atom)和重要容器,如ftyp、moov(mvhd、trak、mdia等)以及mdat。moov保存视频基本信息,mdat存储数据,它们的相对位置影响文件的打开速度。还讨论了关键帧、时间间隔、数据偏移等重要概念,并提到了MP4分析工具和文件预处理技巧。
摘要由CSDN通过智能技术生成

mp4文件格式之fragment mp4 简称为FMP4 与常见mp4有区别

ffmpeg -formats
  DE mp3 MP3 (MPEG audio layer 3)
  E mp4 MP4 (MPEG-4 Part 14) //mp4中的视频封装有多种,解封装应该交给具体的demux,例如h264、mpeg4等demux👉没有D???
  
ffmpeg -h demuxer=mp4 查看 MP4 文件的 Demuxer 信息:
  Demuxer mov,mp4,m4a,3gp,3g2,mj2 (QuickTime I MOV):
  Common extensions: mov,mp4,m钮, 3gp, 3g2 ,mj2.
  可以 看到 MP4 的 Demuxer 与mov 、 3gp 、 m4 a 、 3g2 、 mj2 的 Demuxer 相同

在这里插入图片描述

1、 MP4基本单元box(又称atom)

box = box_header + box_data

box_header{
   
	UINT32 size;		//包括 box header 和 box body 整个 box 的大小,这样我 们就可以在文件中定位各个 box。
			==1👉box长度需要更多位才能表示👉用64位的largesize表示
			==0👉这是文件最后一个box(不再需要以size定位)
	UINT32 type;		//一般是 4 个字符,如“ftyp”、“moov”等,这 些 box type 都是已经预定义好的,分别表示固定的意义。
			=uuid👉用户自定义扩展类型的box
	UINT64 largesize;  if(size==1)	//如果box很大超过了uint32的最大数值,size就被设置为1,并用接下来的 largesize来存放大小。
}

fullbox
	是Box的扩展,Box结构的基础上在Header中增加8bits version和24bits flags

box_data{
   
	情况A、实际数据
	情况B、包含更多子box(此时这个box又称为Container容器)				即box可以嵌套
}

box(又称atom)格式:

ftyp							file type and compatibility
moov							container for all the metadata
mvhd						movie header, overall declarations
trak						container for an individual track or stream
tkhd					track header, overall information about the track
tref					track reference container
mdia					container for the media information in a track
mdhd				media header, overall information about the media
hdlr				handler, declares the media (handler) type
minf				media information container
vmhd			video media header, overall information (video track only)
…			sound/hint/Null media header
dinf			data information box, container
dref		data reference box, declares source(s) of media data in track
stbl			sample table box, container for the time/space map
stsd		sample descriptions (codec types, initialization etc.)
stts		(decoding) time-to-sample
stsc		sample-to-chunk, partial data-offset information
stco		chunk offset, partial data-offset information
moof							movie fragment
…							
mdat							media data container

2、mp4中的容器

MP4文件的3个顶级atom(不能被其他atom嵌套):
1、ftyp:标示了MP4文件,必须出现在第一个。
2、moov:保存了视频的基本信息
3、mdat:保存视频和音频数据

moov和人mdat的相对前后没有强制要求
1、在互联网视频中,若希望mp4文件被快速打开👉moov放在mdat前;
2、若需要将mp4文件下载完成后才可以进行播放👉moov放在后面;
3、分摄像设备生成的MP4文件中,moov在mdat之前,两者之间可能还存在一个Atom free,即moov-free-mdat。free中为全0,只是用于占位。

在这里插入图片描述
在这里插入图片描述

mp4中的一些重要容器:

0 FREE

free是可选的,如果存在,则通常出现在moov与mdat之间,即moov-free-mdat。
free中的数据通常为全0,其作用相当于占位符,在实时拍摄视频,moov数据增多时分配给moov使用。
因为设备录制视频时并不能预先知道视频数据大小,如果moov在mdat之前,随着拍摄mdat的数据会增加,moov数据也会增多,如果没有free预留的空间,则要不停的向后移动mdat数据以腾出moov空间。

1 ftyp—File Type Box

{
   
	32位size  一般为一个固定值
	32位type =0x66 74 79 70 = ftyp”
	32 位的 major brand(4 个字符)  例如“0x6D 70 34 32 = mp42”
	32 位的 minor version
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值