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

news/2024/11/29 22:52:01/

元数据moov(二)tkhd box(ISO-14496-12)

Author:Pirate Leo

Email:codeevoship@gmail.com

ISO 14496 - 12 定义了一种封装媒体数据的基础文件格式,mp4、3gp、ismv等我们常见媒体封装格式都是以这种基础文件格式为基础衍生的。

如果从全局角度了解基础文件格式,请看我之前的博文《MP4文件格式详解——结构概述》。

本系列文档从MP4文件入手,对文件中重要的box进行解析。

<======================================================================>

本次继续解析moov box,关于moov的解析推荐从我上一篇博文《MP4文件格式详解——元数据moov(一)》看起。

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

aligned(8) class TrackHeaderBox extends FullBox(‘tkhd’, version, flags)
{if (version==1) { unsigned int(64) creation_time; unsigned int(64) modification_time; unsigned int(32) track_ID; const unsigned int(32)  reserved = 0; unsigned int(64) duration; } else {   // version==0 unsigned int(32) creation_time; unsigned int(32) modification_time; unsigned int(32) track_ID; const unsigned int(32)  reserved = 0; unsigned int(32) duration; } const unsigned int(32)[2]  reserved = 0; template int(16) layer = 0; template int(16) alternate_group = 0; template int(16)  volume = {if track_is_audio 0x0100 else 0}; const unsigned int(16)  reserved = 0; template int(32)[9]  matrix= { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 }; // unity matrix unsigned int(32) width; unsigned int(32) height; 
}
类似我们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只选择一个进行播放。



http://www.ppmy.cn/news/901325.html

相关文章

beego项目 this.Ctx.Input.RequestBody为空

解决方法&#xff1a; 在配置文件中添加&#xff1a;copyrequestbody true Controller: // UserAdd Title UserAdd // Description 新增事件 // Param body body models.UserAdd true "添加用户" // Success 200 {string} string "{"success":true…

光盘文件格式-udf、iso9660、Joliet、Romeo

ISO和UDF&#xff1a; ISO-9660&#xff1a;又简称ISO&#xff0c;是由国际标准化组织在1985年制定的&#xff0c;当前唯一通用的光盘文件系统&#xff0c;任何类型的计算机都支持它&#xff0c;所有的烧录软件也都支持它。而且&#xff0c;若想让所有的CD-ROM都能读取烧录好的…

WAV、PCM(波形文件)格式分析与详解

WAV文件是在PC机平台上很常见的、最经典的多媒体音频文件,最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为WAV,是WaveFom的简写,也称为波形文件,可直接存储声音波形,还原的波形曲线十分逼真。 WAV文件格式简称WAV格式是一种存储声音波形的数字音频格式,是由微软公司…

关于DBF文件格式的详细说明

在网上搜索DBF文件的说明时,基本能找到两个版本&#xff0c;这个版本的解释比较详细&#xff0c;转载自&#xff1a;http://blog.donews.com/dgsheng/archive/2006/01/17/699067.aspx 转载到自己的空间是为了查找方便&#xff0c;在此向原文的作者表示感谢。以下是正文内容 DB…

crf*.bdb文件过大问题处理

Oracle RAC架构中&#xff0c;如果crf功能开启&#xff0c;则会出现crf*.db文件过大的情况 [roota01 ~]# cd /u01/app/11.2.0.4/grid/crf/db/dm02dbadm01/ [roota01 a01]# du -hs * 1001M crfalert.bdb 46G crfclust.bdb 8.0K crfconn.bdb 926M crfcpu.bdb 999M …

广州大学《网络编程》第二讲作业 —— 文件加密/压缩文件

作业要求 作业难点 文件转换为字符串&#xff0c;并对字符串进行加密&#xff0c;加密后进行解密文件的递归读取文件的压缩&#xff0c;Zip流的使用 作业代码 作业1 本代码参考意义价值不大&#xff0c;文件读取较为冗余&#xff0c;用于博主本人记录。 里面字符串加密的工…

如何制作DBC文件

CANdb 制作DBC文件 2020-06-08 刚看到55号小白鸭的教程挺好的&#xff0c;贴上地址 [第55号小白鸭的教程](https://blog.csdn.net/weixin_44536482/article/details/88914753) 一&#xff1a;安装好CANdb 软件&#xff1b; 二&#xff1a;打开CANdb如图 创建一个dbc文件 选择…

【0161】VFD如何打开一个文件?

文章目录 1. VFD机制概述2. 打开第一个文件时候,VfdCache内部变化2.1 新建32个文件2.1.1 chown()修改文件拥有者权限2.2 PG源码增加自己的代码2.2.1 函数实现2.2.1.1 重新编译PG源码2.3 获取一个可用的vfd2.3.1 为VfdCache分配内存空间2.3.2 vfdP指针间接初始化2.4 初始化vfd中…