MP4文件是由很多个BOX组成,每个BOX包含3个部分:长度、类型、数据。
一个MP4文件最上面一层由ftyp、moov、mdat构成
1 ftyp:
00 00 00 1C是BOX长度,66 74 79 70是BOX类型
2 moov:
00 00 24 E1是BOX长度,6D 6F 6F 76是BOX是类型
2.1 moov 中包含mvhd和trak
2.1.1 mvhd:
00 00 00 6C是BOX长度,6C 6D 76 68是BOX类型
2.1.2 trak:
00 00 18 29是BOX长度,74 72 61 6B是BOX类型
2.2 trak中包含tkhd和mdia
2.2.1 tkhd:
00 00 00 5C是BOX长度,74 6B 68 64是BOX类型
2.2.2 mdia:
00 00 17 A1是BOX长度,6D 64 69 61是BOX类型
2.3 mdia中包含hdlr和minf
其中hdlr中可以判断出是视频数据还是音频数据,如果是vide,则表示视频数据,如果是soun,则表示音频数据。
2.3.1 hdlr:
00 00 00 31是BOX长度,68 64 6C 72是BOX类型
2.3.2 minf:
00 00 17 48是BOX长度?6D 69 6E 66是BOX类型
2.4 minf中包含dinf和stbl
2.4.1 dinf:
00 00 00 24是BOX长度,64 69 6E 66是BOX类型
2.4.2 stbl:
2.5 stbl中包含:stsd、stts、stss、stsc、stsz、stco
2.5.1 stsd
00 00 00 FE是BOX长度,73 74 73 64是BOX类型
2.5.2 stts(Time To Sample Box)
2.5.3 stss(Sync Sample Box)
2.5.4 stsc(Sample To Chunk Box)
表示每个Chunk包含多少个Sample
2.5.4 stsz(Sample Size Box)
表示每个Sample的大小
2.5.5 stco或co64(Chunk Offset Box)
表示每个数据Chunk在文件中相对于文件起始位置的偏移量。stco表示保存的偏移量是32位;co64表示保存的偏移量是64位。
3 mdat
mdat中包含音频数据和视频数据,根据前面解析出来的Chunk偏移量就可以找到对应的数据。