Cleofwine
首页
文章
分类
关于
音视频开发_Mp4 格式分析
最近更新:2024-09-23
|
字数总计:874
|
阅读估时:3分钟
|
阅读量:
次
Mp4重要box层级
1 ftyp
2 mdat
3 moov(***)
3.1 mvhd
3.2 trak
3.2.1 tkhd
3.2.2 mdia
3.2.2.1 mdhd
3.2.2.2 hdlr
3.2.2.3 minf
3.2.2.3.2 stbl
chunk与sample
3.2.2.3.2.1 stsd
3.2.2.3.2.2 stts
3.2.2.3.2.3 stss
3.2.2.3.2.4 stsc
3.2.2.3.2.5 stsz
3.2.2.3.2.6 stco
如何计算Sample的偏移位置?
Mp4重要box层级
ftyp
mdat
moov
mvhd
trak
tkhd
mdia
mdhd
hdlr
minf
vmhd or smhd(可以区分音视频)
dinf
dref
stbl
stsd
stts
stsc
stsz(可选)
stco
stss(可选)
一个有用的在线分析box:
https://gpac.github.io/mp4box.js/test/filereader.html
1 ftyp
File Type Box,⼀般在⽂件的开始位置,描述的⽂件的版本、兼容协议等。
2 mdat
存放具体的媒体数据
3 moov(***)
Movie Box,包含本⽂件中所有媒体数据的宏观描述信息以及每路媒体轨道的具体信息。⼀般位于放在⽂件末尾,但如果为了⽀持http边下载边播放则需要将moov提前。
3.1 mvhd
Movie Header Box,记录整个媒体⽂件的描述信息,如创建时间、修改时间、时间度量标尺、可播放时
⻓等。
3.2 trak
Track Box,记录媒体流信息,⽂件中可以存在⼀个或多个track,它们之间是相互独⽴的。
3.2.1 tkhd
Track Header Box,包含关于媒体流的头信息。
3.2.2 mdia
Media Box,这是⼀个包含track媒体数据信息的container box。
3.2.2.1 mdhd
Media Header Box,存放视频流创建时间,⻓度等信息。
3.2.2.2 hdlr
Handler Reference Box,媒体的播放过程信息。
3.2.2.3 minf
minf:Media Information Box,解释track媒体数据的handler-specific信息。
3.2.2.3.2 stbl
Sample Table Box,上⽂提到mdia中最主要的部分是存放⽂件中每个sample信息的stbl。
chunk与sample
在mp4⽂件中,sample是⼀个媒体流的基本单元,例如视频流的⼀个sample代表实际的nal数据。chunk是数据存储的基本单位,它是⼀系列sample数据的集合,⼀个chunk中可以包含⼀个或多的sample。、
3.2.2.3.2.1 stsd
Sample Description Box,存放解码必须的描述信息。
h264视频stsd下一级包含了avc1
avc1:包含了视频Width、Height
avcC:包含了视频编码器相关的信息,包括
sps、pps
等信息
音频的stsd包含了⾳频相关的信息,⽐如采样率,通道数量等。
3.2.2.3.2.2 stts
Time-to-Sample Box,定义每个sample时⻓。
视频stts,Number of entries,这个参数需要注意并不是sample的个数,
sample的实际数量需要将每个entry的sample count进⾏累加才是真正的sample个数。
第1个sample时间为3720,单位⽤mdhd的time scale进⾏换算,⽐如视频的是90000,此时换算成秒为3720/90000 = 0.0413333333333333秒。
音频stts,与视频仅有单位换算的区别
3.2.2.3.2.3 stss
Sync Sample Box,同步sample表,存放关键帧列表,关键帧是为了⽀持随机访问。
3.2.2.3.2.4 stsc
Sample-To-Chunk Box,sample-chunk映射表。
First chunk:使⽤该表项的第⼀个chunk序号
Samples per chunk:使⽤该表项的chunk中包含有⼏个sample
Sample description ID:使⽤该表项的chunk参考的stsd表项序号
3.2.2.3.2.5 stsz
Sample Size Box,指定了每个sample的size。
3.2.2.3.2.6 stco
Chunk Offset Box,指定了每个chunk在⽂件中的位置,这个表是确定每个sample在⽂件中位置的关键。
如何计算Sample的偏移位置?
如何已知pts得到对应sample在文件中的位置?
将pts转换为媒体对应的时间坐标系
根据stts(time-to-sample)计算出某个pts对应的sample序号
根据stsc(sample-to-chunk)计算出sample存放在哪个chunk中
根据stco(chunk offset)获取对应chunk在文件中的偏移位置
根据stsz(sample size)获取sample在chunk内的偏移位置并加上第四步中的chunk偏移位置
2023-08-09
该篇文章被 Cleofwine
归为分类:
音视频