mp4box-h264-ftyp-moov-mvhd-thkd-avcC-sps-pps 详解

1、mp4文件,是由多个Box或FullBox组成

2、 Box,每个Box由Header和Data组成,FullBox,是Box的扩展,Box结构的基础上在Header中增加8bits version和24bits flags

3、 Header,包含了整个Box的长度size和类型type。当size==0时,代表这是文件中最后一个Box;当size==1时,意味着Box长度需要更多bits来描述,在后面会定义一个64bits的largesize描述Box的长度;当type是uuid时,代表Box中的数据是用户自定义扩展类型。

4、 Data,是Box的实际数据,可以是纯数据也可以是更多的子Boxes,见下图:

推荐一个mp4的图形界面解析工具:mp4info

上图左侧栏 ftyp  moov  trak  tkhd  edts  elst  mdia 等都是一个Box,moov 包含 trak

ftyp 是第一个box,二进制数据见下图

(1) 00 00 00 1c 是ftyp的大小----共28字节

(2) 66 74 79 70 是ftyp的类型ASCII值----ftyp

(3) 6d 70 34 32 在版本号 mp42

(4) 00 00 00 01 小版本号

(5) 6d 70 34 31 / 6d 70 34 32 / 69 73 6f 6d 兼容版本号 mp42 / mp41 / isom

moov  

00 02 a7 cc 大小----174028

6d 6f 6f 76  类型ASCII值----moov

mvhd

00 00 00 6c 大小----108

6d 76 68 64 类型ASCII值----mvhd ,

00 00 00 00 这个是FullBox----8bits version和24bits flags

d9 19 03 20 创建时间    3 642 295 072  从UTC时间的1904年1月1日0点至今的秒数

d9 19 03 20 修改时间

00 00 02 58  Time scale 文件在1秒时间内的刻度 Time scale----600    duration / timescale = 可播放时长(s)

00 02 99 e0  duration 该track的时间长度,用duration和Time scale值可以计算track时长---170464

00 01 00 00  媒体速率,这个值代表原始倍速

01 00 媒体音量,这个值代表满音量

接下来的一系列值都是结构中的预定义值,参见结构定义即可

thkd

00 00 00 5c 大小----92

74 6b 68 64 类型ASCII值----tkhd

00 00 00 01 这个是FullBox----8bits version和24bits flags

d9 19 03 20 创建时间    3 642 295 072  从UTC时间的1904年1月1日0点至今的秒数

d9 19 03 20 修改时间

00 00 00 01  trak id号,不能重复且不能为0

00 00 00 00  保留的

00 02 99 e0 duration时长---170464

00 00 00 00 00 00 00 00 保留的

00 00 视频层,默认为0,值小的在上层  
00 00 track分组信息,默认为0表示该track未与其他track有群组关系  
01 00 媒体音量,这个值代表满音量
00 00 保留的
接下来36个字节为视频变换矩阵  
01 70 00 00 宽  368
02 70 00 00 高  624

avcC--sps pps

在H264中,SPS和PPS存在于NALU header中,而在MP4文件中,SPS和PPS存在于AVCDecoderConfigurationRecord, 首先要定位avcC

00 00 00 2a 大小----42

61 76 63 43 类型ASCII值----avcC

图片转自 https://www.cnblogs.com/ghw-NO1/archive/2012/08/27/2658896.html

 

发布了12 篇原创文章 · 获赞 7 · 访问量 4028
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览