VOB文件解析
本文概要地介绍了VOB文件逻辑结构。帮您了解VOB文件是如何组织的。
MPEG-2系统流
一个VOB文件是一个MPEG-2系统流。这意味着它完全遵循MPEG-2系统级标准,ISO 13818-1.然而,VOB文件是这个标准的的一个非常严格的子集。因此可以说所有的VOB文件都是MPEG-2系统流,但是不是所有的MPEG-2系统流都符合VOB文件的定义。
包组件(Pack)/扇区(sector)大小
DVD 扇区包含2048个字节的数据,这也是一个包组件的大小。在MPEG-2中,包组件主要用来将一些同时呈现的基本流组织在一起(比如音频,视频),它们的大小是变化的。包组件头中也可以包含用于同步的时间信息。
在DVD-Video中,每一个扇区是一个包组件。这可能增加一些开销,但是这使得随机访问数据流变得非常容易。
包组件(Pack)内容
每个包组件(pack)以一个包组件头开始,可以包含一个或2个数据包(packet),但是不能超过2个。包组件中的信息可以是以下同类信息:导航数据(一个NAV包组件),视频,音频或子图(subpicture)。
导航数据包组件(NAV pack)包含系统头和两个分别叫做呈现控制信息(PCI:Presentation Control Information)和数据搜寻信息(DSI :Data Search Information)的固定长度的的数据包。
视频,音频和子图包组件仅仅包含用于内容的打包的基本流(PES :Packetized Elementary Stream),如果需要也可以包含一个填充数据包。
非标准部分
幸运的是MPEG-2系统以私有流形式为非标准数据做了预留。有两种类型的私有流,其中仅有一种形式拥有呈现时间戳(PTS:Presentation Time Stamps)和解码时间戳(DTS:Decoder Time Stamps)形式的时间信息。私有流的实际内容由应用决定,在我们这篇文章中,应用指的是DVD-Video.
私有流1就是哪个有时间信息的流,所以DVD-Video使用这个流处理子图和其它的音频系统(AC3,DTS,LPCM等),这些列举的音频系统不属于MPEG。每个私有流数据包(packet)的实际内容由子流号(sub-stream number)决定。
另一个私有流,私有流2,被用来在导航数据包组件(NAV pack)中处理导航数据包(packet)。
VOBU
包组件之上更高一级的逻辑结构叫做视频对象单元(Video OBject Unit)或VOBU.
每一个VOBU以一个导航数据包组件(NAV pack)开始,同时包含恰好半秒的程序(program)。VOBU的大小是由叫做图片组(GOP:Group Of Pictures)的视频编码单元决定。根据需要,一个VOBU包含一个或更多的完全的GOP。在VOBU中的最后一个视频包组件(pack)中,如果需要可以由填充流或填充字节填充。和视频存在同一范围内的带有DTS数据的音频和子图被包括在每一个VOBU内。直到一个cell的末端音频才会被填充,因此音频桢可以跨多个VOBU。
Cell
VOBU上层的逻辑结构是Cell,Cell可以包含任意数量的完整的VOBU。Cell的长度和位置是完全任意的,依赖于整个程序(电影)的组织。章节,多角度,段落,甚至如何对远程遥控的“上一个”和“下一个”做出反映都决定了Cell的位置。
VOB
VOB是一个或多个Cell的集合。一个完整的段落可以仅仅是一个VOB,但是通常由多个VOB组成。有时VOB的使用是任意的,通常按照顺序每一个章节是一个新的VOB,在VOB内每一个场景是一个Cell。一般不存在这种情况。事实上只有一个地方需要多个单独的VOB,那就是多角度。
多个1GB文件
在DVD上,一个段落集(VTS)中的所有内容是相连的,但是在计算机兼容的文件系统中为了跨平台的需要,一个段落集可以被分割成多个1GB大小的文件。通过查看第二个或其后文件的包含在导航数据包中的逻辑块地址(LBA:Logical Block Address),你能发现地事实上段落集没有被真正的分割开。
文件的分割是没有考虑内容的,这就是为什么处理除第一个文件以外的文件是困难的,因为第二个及以后的文件极有可能不是以一个VOBU开始(一个VOBU是以一个导航数据包开始)。524,287扇区(1,048,574 KB, 1,073,739,776 字节)是通常的分割点。以16进制表示为7FFFF扇区(219-1)或3FFFF800 字节。