Chinaunix首页 | 论坛 | 博客
  • 博客访问: 671867
  • 博文数量: 160
  • 博客积分: 2384
  • 博客等级: 大尉
  • 技术积分: 1366
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-01 11:35
文章分类
文章存档

2015年(45)

2014年(36)

2012年(28)

2011年(37)

2010年(2)

2009年(10)

2008年(2)

分类: 其他平台

2015-05-29 11:26:21

1.File Type Box

Box Type: `ftyp’
这种box一般情况下都会出现在mp4文件的开头,它可以作为mp4容器格式的可表示信息。就像flv头‘F’ 'L' 'V' 3字节,MKV头部的1A 45 DF A3 、ASF_Header_Object 可以作为ASF容器格式的可辨识信息一样。

ftyp box内容结构如下


  1. aligned(8) class FileTypeBox  
  2. extends Box(‘ftyp’) {  
  3. unsigned int(32) major_brand;  
  4. unsigned int(32) minor_version;  
  5. unsigned int(32) compatible_brands[]; // to end of the box  
  6. }  


2.Movie Box

Box Type: ‘moov’

moov 这个box 里面包含了很多个子box,就像上篇那个图上标的。一般情况下moov 会紧跟着 ftyp。moov里面包含着mp4文件中的metedata。音视频相关的基础信息。让我们看看moov 里面都含有哪些重要的box。

2.1 Movie Header Box

Box Type: ‘mvhd’
mvhd 结果如下:
  1. aligned(8) class MovieHeaderBox extends FullBox(‘mvhd’, version, 0) {  
  2. if (version==1) {  
  3. unsigned int(64) creation_time;  
  4. unsigned int(64) modification_time;  
  5. unsigned int(32) timescale;  
  6. unsigned int(64) duration;  
  7. else { // version==0  
  8. unsigned int(32) creation_time;  
  9. unsigned int(32) modification_time;  
  10. unsigned int(32) timescale;  
  11. unsigned int(32) duration;  
  12. }  
  13. template int(32) rate = 0x00010000; // typically 1.0  
  14. template int(16) volume = 0x0100; // typically, full volume  
  15. const bit(16) reserved = 0;  
  16. const unsigned int(32)[2] reserved = 0;  
  17. template int(32)[9] matrix =  
  18. { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 };  
  19. // Unity matrix  
  20. bit(32)[6] pre_defined = 0;  
  21. unsigned int(32) next_track_ID;  
  22. }  

Field

Type

Comment

box size

4

box大小

box type

4

box类型

version

1

box版本,0或1,一般为0。

flags

3

 flags

creation time

4

创建时间(相对于UTC时间1904-01-01零点的秒数)

modification time

4

修改时间

time scale

4

文件媒体在1秒时间内的刻度值,可以理解为1秒长度的时间单元数

一般情况下视频的 都是90000

duration

4

该track的时间长度,用duration和time scale值可以计算track时长,比如audio track的time scale = 8000, duration = 560128,时长为

70.016,video track的time scale = 600, duration = 42000,时长为70

rate

4

推荐播放速率,高16位和低16位分别为小数点整数部分和小数部分,即[16.16] 格式,该值为1.0(0x00010000)表示正常前向播放

volume

2

与rate类似,[8.8] 格式,1.0(0x0100)表示最大音量

reserved

10

保留位

matrix

36

视频变换矩阵

pre-defined

24

next track id

4

下一个track使用的id号


所以通过解析这部分内容可以或者duration、rate等主要信息。举个例子:



上面的例子解析可知 time scale = 90000,duration = 15051036(E5A91C)/ time scale = 167s.

2.2 Track Box

Box Type: ‘trak’

在moov 这个box中会含有若干个track box.每个track都是相对独立。tarck box里面会包含很多别的box,有2个很关键 Track Header BoxMedia Box。下图是个普通的mp4文件。可以看到track box的简单结构。


2.2.1 Track Header Box

Box Type: ‘tkhd’
  1. aligned(8) class TrackHeaderBox  
  2. extends FullBox(‘tkhd’, version, flags){  
  3. if (version==1) {  
  4. unsigned int(64) creation_time;  
  5. unsigned int(64) modification_time;  
  6. unsigned int(32) track_ID;  
  7. const unsigned int(32) reserved = 0;  
  8. unsigned int(64) duration;  
  9. else { // version==0  
  10. unsigned int(32) creation_time;  
  11. unsigned int(32) modification_time;  
  12. unsigned int(32) track_ID;  
  13. const unsigned int(32) reserved = 0;  
  14. unsigned int(32) duration;  
  15. }  
  16. const unsigned int(32)[2] reserved = 0;  
  17. template int(16) layer = 0;  
  18. template int(16) alternate_group = 0;  
  19. template int(16) volume = {if track_is_audio 0x0100 else 0};  
  20. const unsigned int(16) reserved = 0;  
  21. template int(32)[9] matrix=  
  22. { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 };  
  23. // unity matrix  
  24. unsigned int(32) width;  
  25. unsigned int(32) height;  
  26. }  

Field

Type

Comment

box size

4

box大小

box type

4

box类型

version

1

box版本,0或1,一般为0。

flags

3

按位或操作结果值,预定义如下:
0x000001 track_enabled,否则该track不被播放;
0x000002 track_in_movie,表示该track在播放中被引用;
0x000004 track_in_preview,表示该track在预览时被引用。
一般该值为7,如果一个媒体所有track均未设置track_in_movie和track_in_preview,将被理解为所有track均设置了这两项;对于hint track,该值为0

track id

4

id号,不能重复且不能为0

reserved

4

保留位

duration

4

track的时间长度

reserved

8

保留位

layer

2

视频层,默认为0,值小的在上层

alternate group

2

track分组信息,默认为0表示该track未与其他track有群组关系

volume

2

[8.8] 格式,如果为音频track,1.0(0x0100)表示最大音量;否则为0

reserved

2

保留位

matrix

36

视频变换矩阵

width

4

height

4

高,均为 [16.16] 格式值,与sample描述中的实际画面大小比值,用于播放时的展示宽高


未完待续... 下一篇 Media Box
阅读(1673) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~