实战mp4文件解析——对着文件分析,可以一看

来源:互联网 发布:怎么关掉电脑445端口 编辑:程序博客网 时间:2024/06/04 22:48


http://blog.csdn.net/nogodoss/article/details/39368721



抽了一段时间学习了MP4文件格式.也解析了一个mp4文件的样本.留以自用或帮助需要帮助的人.

其中有些地方本人也不很明白(我也标注了).希望明白的人指点说明.

以下MP4文件从网上随意找的.

 /////////////////begin ftyp部分的解析 /////////////////////////////

00 00 00 14        //4字节    length     (长度为20字节)

66 74 79 70        //4字节    BoxType  (“ftyp”   box的标识)

69 73 6F 6D       //4字节    Major_brand      (“isom”)

00 00 00 01        //4字节    Minor_version     (iosmo 的版本号)

69 73 6F 6D       //4字节    Compatible_brands  /*本文件只遵从ismo协议注:有些支持iso2,mp41,那么这个字段就会随着支持的协议而增加字节数*/

 /////////////////end ftyp部分的解析 /////////////////////////////


 /////////////////begin moov box(Moive Box)部分的解析 /////////////////////////////

00 01 17 7A   但是这里不明白00 01 17  7A是什么含义??

6D 6F 6F 76    /*6D 6F 6F 76 标识为moov*/ 

 /*Moov Box或者称Moive Box的头,每个MP4文件必须带有moov Box. 而moov Box下必须包含mvth Box  */


   ////// begin    mvhd Box 解析

00 00 00 6C       //4字节    Box Size    /*长度为108字节*/

6D 76 68 64       //4字节    Box type   /*“mvhd” 标识*/

00                      //1字节    version

00 00 00            //3字节     flag

CF 28 A8 65      //4字节    Creation time   创建时间

CF 28 A8 65      //4字节    Modification time 修改时间  (/*创建时间和修改时间一样,说明文件创建后就没有修改过*/)

00 00 02 58       //4字节    time scale  表示本文件的所有时间按描述说采用的单位,0x258=600,即1秒平均分成600份.

00 02 1E DB      //4字节     duration      时间长度  0x21EDB=138971./* duration / timesacel = 可播放时长. 138971 /600 = 231.说明这个文件可以播放231.0秒*/

00 01 00 00       //4字节    rate      播放速率  /*0x00010000  表示原始倍速*/

01 00                 //2字节    volume    音量      /*0x0100 表示满音量*/


00 00 00 00 00 00 00 00 00 00                //10字节   保留字段


00 01 00 00 00 00 00 00 00 00 00 00 

00 00 00 00 00 01 00 00 00 00 00 00 

00 00 00 00 00 00 00 00 40 00 00 00      //36字节    视频变换矩阵


00 00 00 00 00 00 00 00 00 00 00 00 

00 00 00 00 00 00 00 00 00 00 00 00      //24字节  pre-defined

00 00 00 03                                              //4字节   下一个track id  Next track ID

 /////////////////end moov box(Moive Box)部分的解析 /////////////////////////////

00 00 00 15 69 6F 64 73 

00 00 00 00 10 07 00 4F FF FF 29 01 FF 00 00 64 A1     /*这一段不明白含义*/

 /////////////////begin Track Header Box(tkhd)部分的解析 /////////////////////////////

74 72 61 6B       /*其中74 72 61 6B 表示’trak’*/


00 00 00 5C       //4 字节   Box size

74 6B 68 64       // 4字节  Box type   /* tkhd */

00                      //1字节  version

00 00 01            //3字节  falg  /*不为0  */

CF 28 A8 65      //4字节  创建时间

CF 28 A8 66      // 4字节  修改时间  /* 创建时间和修改时间不一致,说明tkhd这块创建后修改过*/

00 00 00 01       // 4字节 track id  (0x00000001= 1 1开始)

00 00 00 00       // 4字节保留

00 02 1E B8      //4字节   duration  track的时间长度  0x00021EB8 = 138936

00 00 00 00 00 00 00 00     //8字节的保留

00 00                 //2字节  layer  视频层  

00 00                 //2字节 alternate group      track 分组信息

00 00                 //2字节  valume  音量    /*为0表明不是最大音量*/

00 00                 //2字节  保留字段


00 01 00 00 

00 00 00 00 

00 00 00 00 

00 00 00 00 

00 01 00 00 

00 00 00 00 

00 00 00 00 

00 00 00 00 

40 00 00 00       //36字节   视频变换矩阵   


02 80 00 00       //4字节   宽度  /*这么大的宽度?*/

01 68 00 00       // 4字节   高度   /*这么大的高度?*/

 /////////////////end Track Header Box(tkhd)部分的解析 /////////////////////////////

00 00  64 3D /*这一段不明白含义*/

 /////////////////begin Media Header Box(mdhd)部分的解析 /////////////////////////////

6D 64 69 61    // 4个字节  mdhd 标识   /*mdia*/


00 00 00 20         // 4字节    Box size    

6D 64 68 64        //4字节 Box type      /*“mdhd”*/

00                        //1字节 version

00 00 00              // 3字节 flag

CF 28 A8 65        //4字节 创建时间

CF 28 A8 66        //4字节 修改时间

00 00 61  A8        //4字节 time scale    //0x61A8=25000

00 58 55 48         //4字节 duration       //0x585548=5789000

55 C4                  //2字节 语言码

00 00                   //2字节pre-defined

 /////////////////end Media Header Box(mdhd)部分的解析 /////////////////////////////


 /////////////////begin Hander Reference Box(hdlr)部分的解析 /////////////////////////////

00 00 00 26         //4字节      Box size

68 64 6C 72        //4字节      Box type     /*hdlr*/ 

00                        //1字节    version

00 00 00              //3字节     flag

00 00 00 00         //4字节  pre-defined

76 69 64 65         //4字节   handle type    /* 0x76696464  = “vide”   */


00 00 00 00 

00 00 00 00 

00 00 00 00         //12字节  保留字段


76 69 64 65 6F    // 不定长度的name     /* 0x766964656F= “video”*/

 /////////////////end Hander Reference Box(hdlr)部分的解析 /////////////////////////////


 /////////////////begin Media Information Box(minf)部分的解析 /////////////////////////////


mind Box下包含有

Video Media Header Box( vmhd), 

Sound Media Header Box(smhd), 

Hint Media Header Box(hmhd)三种


00 00 00 63 EF   /* 这段也不明白含义也许与上下都有联系*/


6D 69 6E 66        //4字节   Box type    /*minf*/


/////////////////begin Video Media Header Box(vmhd)部分的解析 /////////////////////////////

00 00 00 14         // 4字节  Box size   0x14=20

76 6D 68 64        // 4字节  Box type    /*vmhd*/

00                        // 1字节 version

00 00 01              //3字节  flag

00 00 00 00         //4字节  graphics  mode

00 00 00 00         //4字节  opcolor

/////////////////end Video Media Header Box(vmhd)部分的解析 /////////////////////////////



/////////////////begin Data Information Box(dinf)部分的解析 /////////////////////////////

00 00 00 24         //4字节  Box size   /*0x24= 36*/

64 69 6E 66         //4字节  Box type /*dinf*/

00 00 00 1C         //4字节  Box size  (dref的长度   0x1C= 28)

64 72 65 66         //4字节    Box type    0x64726566=“dref”

00                        // 1字节  version

00 00 00              //3字节 flag

00 00 00 01         //  /*这个不知道含义(根据经验推理Box type 后面是1个字节的version,3个字节的flag,后面有url,而url前是4个字节的url count)*/

00 00 00 0C        //4字节   entry count  /*url count*/

/*也可能前面的0x00000001是entry count.原因是url只有一个*/

75 72 6C 20        //url 列表 /*其中 0x75726C为”url”, 0x20 为空字符.意思是url为空*/

/////////////////end Data Information Box(dinf)部分的解析 /////////////////////////////


00 00 00 01 00 00 63 AF              /* 这段也不明白含义也许与上下都有联系*/


/////////////////Begin Sample Table Box(stbl)部分的解析 /////////////////////////////


73 74 62 6C        //4字节   STBL标识头 “stbl”


/////////////////Begin Sample Description Box(stsd)部分的解析 /////////////////////////////

00 00 00 C7        //4字节    Box Size      /*0xC7=199*/

73 74 73 64         //4字节    Box type      /*0x73747364=“stsd”*/

00                        //1字节    version

00 00 00              //3字节     flag

00 00 00 01         //4字节     entry_count        /* 0x01=1  说明有一个entry */

    //以下为AudioSampleEntry

00 00 00 B7         // 4字节   sample description 的字节数  /*0xB7=183*/

6D 70 34 76         //4字节   存储数据格式   /*0x6D703476=‘mp4v’*/

00 00 00 00 00 00    //6字节   保留字段

00 01                    //2字节    数据引用索引  /*利用这个索引与当前sample description 关联的数据,数据引用存储在 Data reference Bos*/


00 00 00 00 00 00 00 00 

00 00 00 00 00 00 00 00 02 80 01 68 00 48 00 00 

00 48 00 00 00 00 00 00 00 01 00 00 00 00 00 00 

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

00 00 00 00 00 00 00 00 00 00 00 18 FF FF 00 00 

00 10 70 61 73 70 00 00 00 01 00 00 00 01 00 00 

00 51 65 73 64 73 00 00 00 00 03 43 00 00 00 04 

3B 20 11 00 C3 9D 00 37 63 A8 00 17 60 80 05 2C 

00 00 01 B0 01 00 00 01 B5 89 13 00 00 01 00 00 

00 01 20 00 C4 8D 88 00 CD 14 04 2D 14 43 00 00 

01 B2 4C 61 76 63 35 33 2E 38 2E 30 06 01 02


/////////////////end Sample Description Box(stsd)部分的解析 ///////////////////////////// 


/////////////////Begin Time To Sample Box(stts)部分的解析 /////////////////////////////

00 00 00 18          //4字节   Box Size    /*0x18=24*/

73 74 74 73          //4字节   Box type    /*0x73747473=’stts’*/

00                         //1字节   version

00 00 00               //3字节    flag

00 00 00 01          //4字节    entry_cout   /* 0x01=1 说明有一个entry*/

00 00 16 9D         //4字节     sample_count           /*0x169D=5789,说明有5789个样本(sample)*/

00 00 03 E8         //4字节     sample_delta           /*0x03E8=1000,*/

/*sample_countsample_dalta说明该文件有5789个样本(sample),每个样本(sample)的时间为1000, 这样结合mdhd中的timescale=25000.  每个sample的时长:1000/25000=0.04秒*/

/////////////////end Time To Sample Box(stts)部分的解析 /////////////////////////////



/////////////////Begin sync Sample Box(stss)部分的解析 /////////////////////////////

00 00 00 70         //4字节   Box size    /*0x70=112*/

73 74 73 73         //4字节    Box type    /*0x73747373=’stss’*/

00                        //1字节   version

00 00 00              //3字节   flag

00 00 00 18         //4字节  Number of entries      /*数量*/


00 00 00 01 00 00 00 FB

00 00 01 F5 00 00 02 EF 00 00 03 E9 00 00 04 E3 

00 00 05 DD 00 00 06 D7 00 00 07 D1 00 00 08 CB 

00 00 09 C5 00 00 0A BF 00 00 0B B9 00 00 0C B3 

00 00 0D AD 00 00 0E A7 00 00 0F A100 00 10 9B 

00 00 11 95 00 00 12 8F 00 00 13 89 00 00 14 83 

00 00 15 7D 00 00 16 77 

/////////////////end sync Sample Box(stss)部分的解析 /////////////////////////////


/////////////////Begin Sample to chunk Box(stsc)部分的解析 /////////////////////////////

00 00 00 34         //4字节  Box size  /*0x34=52*/

73 74 73 63         // 4字节  Box type    /*0x73747363=’stsc’*/

00                        //1字节   version

00 00 00              //3字节   flag

00 00 00 03         //4字节     Number of entries   

/*第一个chunk*/

00 00 00 01         //4字节     first chunk  /*第一个chunk的序号, 0x01表示1序号*/

00 00 00 0D        //4字节    Samples per chunk    /*当前trunk内的sample数目, 0x0D=13,当前有13个sample数据*/

00 00 00 01         //4字节     /*与这些sample关联的sample description 的序号*/

/*第二个chunk*/

00 00 00 02 

00 00 00 0C 

00 00 00 01 

/*第三个chunk*/

00 00 01 E3 

00 00 00 04 

00 00 00 01 

/////////////////end Sample to chunk Box(stsc)部分的解析 /////////////////////////////


/////////////////Begin Sample Size Box(stsz)部分的解析 /////////////////////////////

00 00 5A 88         //4字节  Box size    /*0x5A88 = 23176*/

73 74 73 7A         //4字节  Box type    /*0x7374737A=’stsz’*/

00                        //1字节   version

00 00 00              //3字节   flag

00 00 00 00         //4字节   sample size    /*0表示所有的sample 有不同的长度,如果所有的sample都是1024长度,那就是0x400*/

00 00 16 9D        //4字节  Number of entries    /*0x169D=5789*/


00 00 2F F0 00 00 02 A7 00 00 01 A7 00 00 06 E0 00 00 

08 7A 00 00 08 A2 00 00 07 58 00 00 0A AE 00 00 

04 CA 00 00 36 0E 00 00 11 21 00 00 2F 60 00 00 

41 39 00 00 3E 0A 00 00 18 1A 00 00 13 31 00 00 

1A 1E 00 00 15 E8 00 00 11 E3 00 00 1A CC 00 00 

00000380h: 15 21 00 00 14 BC 00 00 18 7B 00 00 21 BB 00 00 

00000390h: 17 A1 00 00 16 BE 00 00 16 31 00 00 16 76 00 00 

000003a0h: 17 8E 00 00 15 1D 00 00 15 3E 00 00 19 88 00 00 

000003b0h: 16 A7 00 00 17 5E 00 00 17 A2 00 00 16 65 00 00 

000003c0h: 15 F7 00 00 19 FA 00 00 15 DE 00 00 16 54 00 00 

000003d0h: 18 3D 00 00 15 F1 00 00 16 7D 00 00 18 9B 00 00 

000003e0h: 14 E5 00 00 17 A2 00 00 18 F2 00 00 58 27 00 00 

000003f0h: 10 DB 00 00 19 F9 00 00 1C 86 00 00 17 41 00 00 

00000400h: 19 5A 00 00 1F EB 00 00 16 F1 00 00 1A CF 00 00 

00000410h: 1D C3 00 00 17 E9 00 00 19 B8 00 00 1D 7B 00 00 

00000420h: 19 F9 00 00 1D 74 00 00 1F 63 00 00 15 99 00 00 

00000430h: 17 DD 00 00 1C 77 00 00 19 44 00 00 1E A2 00 00 

00000440h: 20 C1 00 00 17 55 00 00 1F CE 00 00 06 DA 00 00 

00000450h: 1F A8 00 00 19 97 00 00 1B A0 00 00 19 60 00 00 

00000460h: 18 E4 00 00 16 A9 00 00 1D 65 00 00 17 11 00 00 

00000470h: 16 E1 00 00 1A 14 00 00 18 FE 00 00 17 05 00 00 

00000480h: 1E 01 00 00 19 1B 00 00 1C 17 00 00 1A 49 00 00 

00000490h: 18 2A 00 00 15 F1 00 00 21 18 00 00 18 EA 00 00 

000004a0h: 19 7A 00 00 1C 63 00 00 15 BB 00 00 20 02 00 00 

000004b0h: 08 27 00 00 1F 70 00 00 16 5E 00 00 14 B5 00 00 

000004c0h: 19 E4 00 00 15 22 00 00 15 25 00 00 16 48 00 00 

000004d0h: 17 BE 00 00 17 3A 00 00 1A 44 00 00 17 76 00 00 

000004e0h: 18 42 00 00 18 D8 00 00 16 F4 00 00 15 1F 00 00 

000004f0h: 1C 49 00 00 15 9B 00 00 18 68 00 00 15 9D 00 00 

00000500h: 17 08 00 00 15 A8 00 00 18 54 00 00 1C 23 00 00 

00000510h: 19 63 00 00 07 14 00 00 20 3E 00 00 16 93 00 00 

00000520h: 19 23 00 00 20 60 00 00 16 64 00 00 16 2F 00 00 

00000530h: 1A 5F 00 00 15 4D 00 00 16 9C 00 00 19 2E 00 00 

00000540h: 17 34 00 00 19 09 00 00 1C 3D 00 00 14 D9 00 00 

00000550h: 16 EC 00 00 20 50 00 00 13 E0 00 00 1C B2 00 00 

00000560h: 22 4E 00 00 10 54 00 00 13 4A 00 00 1E CB 00 00 

00000570h: 14 10 00 00 21 66 00 00 07 23 00 00 19 4E 00 00 

00000580h: 1C E2 00 00 17 76 00 00 21 AD 00 00 10 DF 00 00 

00000590h: 1C 0C 00 00 1C DE 00 00 12 08 00 00 1A 10 00 00 

000005a0h: 20 BC 00 00 12 0E 00 00 1E 7B 00 00 10 0B 00 00 

000005b0h: 1B 9A 00 00 18 B0 00 00 1D 74 00 00 0E 48 00 00 

000005c0h: 1A 36 00 00 1A 9C 00 00 18 04 00 00 16 5F 00 00 

000005d0h: 1F E5 00 00 17 29 00 00 18 84 00 00 06 B4 00 00 

000005e0h: 21 91 00 00 14 D4 00 00 1D F1 00 00 22 44 00 00 

000005f0h: 12 3C 00 00 20 C9 00 00 16 5B 00 00 1D A3 00 00 

00000600h: 14 99 00 00 2A 5F 00 00 12 B3 00 00 17 40 00 00 

00000610h: 22 FC 00 00 11 87 00 00 1D AF 00 00 16 FA 00 00 

00000620h: 1B 7C 00 00 1E 2A 00 00 13 F1 00 00 1F 79 00 00 

00000630h: 14 EC 00 00 25 6F 00 00 10 84 00 00 1A 0B 00 00 

00000640h: 07 D0 00 00 1F 6B 00 00 1E 70 00 00 20 B9 00 00 

00000650h: 14 A4 00 00 1D 10 00 00 1D 45 00 00 16 16 00 00 

00000660h: 19 E8 00 00 1C D0 00 00 1F 8B 00 00 12 D9 00 00 

00000670h: 20 0D 00 00 15 E4 00 00 1B 90 00 00 19 A1 00 00 

00000680h: 1D E2 00 00 16 45 00 00 1A 70 00 00 1C A4 00 00 

00000690h: 11 3B 00 00 1F E5 00 00 14 51 00 00 19 46 00 00 

000006a0h: 32 91 00 00 08 9C 00 00 26 D4 00 00 1C 71 00 00 

000006b0h: 18 D6 00 00 1B F9 00 00 1D AB 00 00 1F 23 00 00 

000006c0h: 1D 94 00 00 29 A1 00 00 1E 13 00 00 20 28 00 00 

000006d0h: 1E 94 00 00 1F 56 00 00 1A 4B 00 00 21 2B 00 00 

000006e0h: 18 96 00 00 1C 65 00 00 1B 8E 00 00 1E 71 00 00 

000006f0h: 15 D1 00 00 21 F0 00 00 21 56 00 00 1C 10 00 00 

00000700h: 18 41 00 00 1E 2F 00 00 0B 94 00 00 22 CF 00 00 

00000710h: 1D 3B 00 00 1D 80 00 00 B0 60 00 00 12 3F 00 00 

00000720h: 2A E9 00 00 15 5D 00 00 16 1D 00 00 1E 3A 00 00 

00000730h: 23 57 00 00 15 2D 00 00 18 00 00 00 1E FB 00 00 

00000740h: 17 01 00 00 18 F8 00 00 18 34 00 00 1C 74 00 00 

00000750h: 10 AD 00 00 21 6C 00 00 15 B9 00 00 13 E9 00 00 

00000760h: 16 15 00 00 6C 56 00 00 14 6D 00 00 06 68 00 00 

00000770h: 1E DB 00 00 15 A0 00 00 1A ED 00 00 16 AA 00 00 

00000780h: 21 EA 00 00 11 B5 00 00 13 64 00 00 1F 1F 00 00 

00000790h: 14 C6 00 00 19 B3 00 00 1E 3E 00 00 18 D8 00 00 

000007a0h: 10 F2 00 00 1E D2 00 00 19 8C 00 00 17 8A 00 00 

000007b0h: 20 52 00 00 0F FD 00 00 18 9E 00 00 19 A5 00 00 

000007c0h: 16 E3 00 00 15 4C 00 00 1C F4 00 00 15 F1 00 00 

000007d0h: 01 48 00 00 14 C4 00 00 19 86 00 00 11 A5 00 00 

000007e0h: 1B 09 00 00 4B FB 00 00 11 BA 00 00 12 B1 00 00 

000007f0h: 23 0F 00 00 12 FC 00 00 1D 9D 00 00 23 DE 00 00

00000800h: 13 3C 00 00 1B 3A 00 00 22 07 00 00 11 1A 00 00 

00000810h: 1B E2 00 00 20 AD 00 00 19 57 00 00 19 F5 00 00 

00000820h: 21 67 00 00 12 BD 00 00 1C DC 00 00 1D DF 00 00 

00000830h: 15 38 00 00 04 80 00 00 1E 7E 00 00 20 2D 00 00 

00000840h: 1C 52 00 00 1C B4 00 00 18 95 00 00 21 52 00 00 

00000850h: 14 2C 00 00 25 62 00 00 15 F4 00 00 14 DD 00 00 

00000860h: 2B AE 00 00 34 DF 00 00 1F BD 00 00 0E FC 00 00 

00000870h: 28 DA 00 00 3F BA 00 00 44 65 00 00 32 88 00 00 

00000880h: 36 A6 00 00 2F 93 00 00 34 AF 00 00 2F 56 00 00 


参考:

http://wenku.baidu.com/view/ed93e51d227916888486d74a.html

http://blog.chinaunix.net/uid-11572501-id-3011812.html

http://blog.csdn.net/pirateleo/article/details/7590056


原创粉丝点击