MPEG-4文件结构
MPEG-4文件结构简介
一. 背景介绍
MPEG-4文件结构的设计目的是以一种灵活、可扩展的格式保存MPEG-4节目,可以方便的交互、管理、编辑、展示内容。节目可以是本地文件系统中的一个文件,也可能是通过TransMux传输的码流。
由于QuickTime的文件格式设计的比较合理,所以MPEG-4工作组以
QuickTime的文件格式为基础设计了MPEG-4的文件格式,具体的内容可以参考ISO/IEC 14496-1/PDAM1。
二. 基本框架
MPEG-4的文件格式是面向对象的,按照节点(atom)结构存储。一个文件中只可能出现三种节点:moov、mdat、free/skip。udta可以在moov或者mdat中出现,但是综合效率、易处理性等因素,本人认为放入moov节点可能更好。
每个节点都包含有大小、类型,大小是该节点的大小,包含大小、类型的长度,以字节为单位;类型是标识节点,区分不同的节点。节点的基本数据结构如下:
aligned(8) class Atom (unsigned int(32) atomtype,
optional unsigned int(8)[16] extended-type) {
unsigned int(32) size;
unsigned int(32) type = atomtype;
if (size==1) {
unsigned int(64) largesize;
}
if (atomtype==‘uuid’) {
unsigned int(8)[16] usertype = extended-type;
}
}
aligned(8) class FullAtom(unsigned int(32) atomtype,
unsigned int(8) v, bit(24) f)
extends Atom(atomtype) {
unsigned int(8) version = v;
bit(24) flags = f;
}
三. 数据结构
下面是对MPEG-4文件结构的详细描述,对每个原子类型,都从七个方面进行描述:
全称:
父节点:(上一级节点)
是否必须:(Yes:必须出现;No:不一定出现)
数量:(出现个数)
语法:(就是数据结构)
语义:(主要字段的解释)
描述:(对该节点的详细解释)
1. moov
全称: Movie Atom
父节点: File
是否必须出现: Yes
数量: Exactly one
语法:
aligned(8) class MovieAtom extends Atom(‘moov’){
}
语义:
多个节点的罗列。
描述:
保存和节目相关的信息,是所有信息节点的祖先节点。他本身没有结构,只是指示本结构的大小。
2. mvhd
全称: Movie Header Atom
父节点: Movie Atom (‘moov’)
是否必须出现: Yes
数量: Exactly one
语法:
aligned(8) class MovieHeaderAtom (unsigned int(32) version)
extends FullAtom(‘mvhd’, version, 0) {
if (version==1) {
unsigned int(64) creation-time;
unsigned int(64) modification-time;
unsigned int(32) timescale;
unsigned int(64) duration;
} else { // version==0
unsigned int(32) creation-time;
unsigned int(32) modification-time;
unsigned int(32) timescale;
unsigned int(32) duration;
}
const bit(32) reserved = 0x00010000;
const bit(16) reserved = 0x0100;
const bit(16) reserved = 0;
const unsigned int(32)[2] reserved = 0;
const bit(32)[9] reserved =
{ 0x00010000, 0, 0, 0, 0x00010000, 0, 0, 0, 0x40000000 };
const bit(32)[6] reserved = 0;
unsigned int(32) next-track-ID;
}
语义:
保存了创建时间、修改时间、时间刻度、节目长度、下一个轨道号。
创建时间、修改时间是从1904年1月1日零时开始所经历的秒数;时间刻度就是把一秒又分为多少份;节目长度,是以时间刻度为单位,只是节目的长度,如果想得到节目可以播放的秒数,就用节目长度除以时间刻度;下一个轨道号,是本节目的最大轨道号加一,如果需要向这个节目加入新的轨道,则新的轨道号就是从这个轨道号开始。
描述:
记录和节目相关的时间、轨道信息。
还有很多的Atom,就不一一列举了。
四. 索引轨道
虽然hint包含在moov中,由于hint的特殊作用,所以需要详细解释这个数据结构。索引轨道只对实时传输协议有用,为流服务器提供必要的流化信息。在文件中对同一数据,可以根据不同的流化协议、不同的数据包大小,生成不同的索引轨道,同时存在同一个文件中,不需要多个数据文件的拷贝。同音频、视频数据相比,索引轨道占
用的空间是很小的。索引轨道中的样本可以同媒体轨道中的样本一一对应,也可以不对应。在流化结束,传输数据包时,不包含任何轨道信息。
一个样本对应一个或者多个RTP数据包。