MP4格式分析之元数据moov(二)

转载 2016年05月31日 13:51:00
本次继续解析moov box, 

moov

 

 

 

 

 

√ 

container for all the metadata

 

mvhd

 

 

 

 

√ 

movie header, overall declarations

 

trak

 

 

 

 

√ 

container for an individual track or stream

 

 

tkhd

 

 

 

√ 

track header, overall information about the track

 

 

tref

 

 

 

 

track reference container

 

 

edts

 

 

 

 

edit list container

 

 

 

elst

 

 

 

an edit list

 

 

mdia

 

 

 

√ 

container for the media information in a track

 

 

 

mdhd

 

 

√ 

media header, overall information about the media

 

 

 

hdlr

 

 

√ 

handler, declares the media (handler) type

 

 

 

minf

 

 

√ 

media information container

 

 

 

 

vmhd

 

 

video media header, overall information (video track only)

 

 

 

 

smhd

 

 

sound media header, overall information (sound track only)

 

 

 

 

hmhd

 

 

hint media header, overall information (hint track only)

 

 

 

 

nmhd

 

 

Null media header, overall information (some tracks only)

 

 

 

 

dinf

 

√ 

data information box, container

 

 

 

 

 

dref

√ 

data reference box, declares source(s) of media data in track

 

 

 

 

stbl

 

√ 

sample table box, container for the time/space map

 

 

 

 

 

stsd

√ 

sample descriptions (codec types, initialization etc.)

 

 

 

 

 

stts

√  

(decoding) time-to-sample

 

 

 

 

 

ctts

 

(composition) time to sample

 

 

 

 

 

stsc

√ 

sample-to-chunk, partial data-offset

information

 

 

 

 

 

stsz

 

sample sizes (framing)

 

 

 

 

 

stz2

 

compact sample sizes (framing)

 

 

 

 

 

stco

√ 

chunk offset, partial data-offset information

 

 

 

 

 

co64

 

64-bit chunk offset

 

 

 

 

 

stss

 

sync sample table (random access points)

 

 

 

 

 

stsh

 

shadow sync sample table

 

 

 

 

 

padb

 

sample padding bits

 

 

 

 

 

stdp

 

sample degradation priority

 

 

 

 

 

sdtp

 

independent and disposable samples

 

 

 

 

 

sbgp

 

sample-to-group

 

 

 

 

 

sgpd

 

sample group description

 

 

 

 

 

subs

 

sub-sample information


前面我们已经知道每个文件是由多个Track(轨道)组成的,每个Track都对应了自身trak box,其中存放了本track的元数据信息。

本次继续解析trak box的一系列子box:

1)tkhd box

 

  1. aligned(8) class TrackHeaderBox extends FullBox(‘tkhd’, version, flags)  
  2.  
  3.     if (version==1)   
  4.       
  5.       unsigned int(64) creation_time;   
  6.       unsigned int(64) modification_time;   
  7.       unsigned int(32) track_ID;   
  8.       const unsigned int(32)  reserved 0;   
  9.       unsigned int(64) duration;   
  10.       
  11.     else   
  12.       // version==0   
  13.         unsigned int(32) creation_time;   
  14.         unsigned int(32) modification_time;   
  15.         unsigned int(32) track_ID;   
  16.         const unsigned int(32)  reserved 0;   
  17.         unsigned int(32) duration;   
  18.       
  19.     const unsigned int(32)[2]  reserved 0;   
  20.     template int(16) layer 0;   
  21.     template int(16) alternate_group 0;   
  22.     template int(16)  volume {if track_is_audio 0x0100 else 0};   
  23.     const unsigned int(16)  reserved 0;   
  24.     template int(32)[9]  matrix= 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 };   
  25.     // unity matrix   
  26.     unsigned int(32) width;   
  27.     unsigned int(32) height;   
  28. }  
  29.   
类似我们moov中的mvhd box,但tkhd仅仅描述的单一Track的特性。

  

上图是实际媒体中的tkhd的数据:

0x5c是tkhd box长度,0x746b6864是“tkhd”的ASCII码。

0x00 00 00 0f是使用了Full box中的flag位(Full box 8bits version + 24bits flag,详见我第一篇日志),这里flag= 0xf,即1111b。

这4位从低到高分别代表:

 

Track_enabled: Indicates that the track is enabled.  若此位为0,则该track内容无需播放(比如我们用一些非线编软件<如Sony Vegas>做视频剪辑时,有些Track仅为我们参考与模仿用,在输出时将该Track关掉)。
Track_in_movie: Indicates that the track is used in the presentation. 
Track_in_preview: Indicates that the track is used when previewing the presentation.

Track_in_poster: Indicates that the track is used in movie's poster.

 

important:我们知道,MP4文件格式是ISO-14496-12基础文件格式的衍生品,14496-14中对-12协议进行了扩充与进一步定义。

重要的是该“14496-12 基础文件格式”协议如果认祖归宗,我们发现这种文件格式最初是由Apple公司的QuickTime媒体格式发展而来的。

即,mov格式发展出了“ISO 14496 - 12协议”,再由该协议衍生出了mp4,f4v,ismv,3gp等我们常见的媒体封装格式。

因此上述标志位的poster位,在14496-12中并没有见到描述,而在Apple的协议中却看到了准确定义。

详见 https://developer.apple.com/library/mac/#documentation/QuickTime/QTFF/QTFFChap2/qtff2.html

 

两个0xc5268eb6 是track的创建时间与最后修改时间;

 

紧随其后的0x00000002,代表track ID =2,Track ID是非0的,唯一的,不可重复使用的标识track的方式;

后面32bit全0是保留位;

0x0009d97c是本track的时长,需要配合mvhd box中的timescale 计算实际的持续时间。

 

后续一些写死的字段不再分析,有些与mvhd重复,可以参见之前的文章。我们看两个关键字段:

layer,类似photoshop中图层的概念,数值小的在播放时更贴近用户(上层图层)。

alternate_group,track的备用分组ID,当该值为0时,意味着本track内容无备份;否则本track会可能会有零到多个备份track。当播放时相同group ID的track只选择一个进行播放。

MP4文件格式详解——元数据moov(二)tkhd box

本次继续解析moov box,关于moov的解析推荐从我上一篇博文《MP4文件格式详解——元数据moov(一)》看起。 moov     ...
  • dxpqxb
  • dxpqxb
  • 2014年12月30日 15:24
  • 1006

MP4文件格式详解——元数据moov(三)tref box

本次继续解析moov box,关于moov的解析推荐从我之前的博文《MP4文件格式详解——元数据moov(一)》看起。 moov     ...
  • dxpqxb
  • dxpqxb
  • 2014年12月30日 15:25
  • 1013

MP4 info查看moov头位置

1、下载安装mp4 info ,目前没有找到mac版本,安装在mac的win虚拟机上 2、测试moov box在mdat box后边的MP4类型,见下图,这种如果要做网络点播,支持拖拽seek的话,需...
  • charleslei
  • charleslei
  • 2016年04月07日 13:06
  • 2421

MP4格式分析之元数据moov(一)

movie box —— container box whose sub-boxes define the metadata for a presentation (‘moov’)  moov包含...
  • duola_rain
  • duola_rain
  • 2016年05月31日 13:57
  • 321

mp4格式分析之元数据moov(三)

由于我本地没有找到包含tref box的MP4文件,因此无法以实际数据分析。 但通过协议足以使我们明白tref box的作用: tref box可以描述两track之间关系。 比如:一个MP4文...
  • duola_rain
  • duola_rain
  • 2016年05月31日 13:53
  • 363

MP4解析,包含moof

MP4解析块架构设 1介绍 1.1目的   Bem,BoxExtractor By Miracle,是MP4ISO 标准解析器。用于华为自研播放器PEPlayer项目组使用。   1.2术语...
  • zjp114695092
  • zjp114695092
  • 2014年05月31日 17:17
  • 4482

正常情况下ffmpeg生成moov是在mdat写完成之后写入

可以分析MP4封装格式的工具比较多除了FFmpeg之外,还有一些常用工具,例如Elecard Stream Eye、MP4BOX、mp4info等;下面简单介绍一下这几款常见工具: 8.1 Elec...
  • wishfly
  • wishfly
  • 2017年01月20日 11:27
  • 2686

MP4封装格式详解

mp4应该算是一种比较复杂的媒体格式了,起源于QuickTime。以前研究的时候就花了一番的功夫,尤其是如何把它完美的融入到视频点播应用中,更是费尽了心思,主要问题是处理mp4文件庞大的“媒体头”。当...
  • u010246197
  • u010246197
  • 2016年10月25日 17:00
  • 3849

实现视频边下边播(视频MOOV信息前置)

(由于时间久,忘记原链接,仅把自己现在实现方式写出以供参考:) public class QtFastStart { public static boolean sDEBUG = fal...
  • lzh838330255
  • lzh838330255
  • 2016年11月22日 15:17
  • 1266

MP4文件格式详解——元数据moov(二)tkhd box

元数据moov(二)tkhd box(ISO-14496-12) Author:Pirate Leo Email:codeevoship@gmail.com ISO 1449...
  • feixiaku
  • feixiaku
  • 2015年12月25日 15:22
  • 581
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MP4格式分析之元数据moov(二)
举报原因:
原因补充:

(最多只允许输入30个字)