预计阅读本页时间:-
7.2 多媒体文件
在大多数系统中,普通的文本文件由字节的线性序列组成,没有操作系统了解或关心的任何结构。对于多媒体而言,情况就复杂多了。首先,视频与音频是完全不同的。它们由不同的设备捕获(视频为CCD芯片,音频为麦克风),具有不同的内部结构(视频每秒有25~30帧,音频每秒有44 100个样本),并且它们通过不同的设备来回放(视频为显示器,音频为扩音器)。
此外,大多数好莱坞电影现在针对的是全世界的观众,而这些观众大多不讲英语。这一情况有两种处理方法。对于某些国家,需要产生一个额外的声音轨迹,用当地语言进行配音,但是不包含音效。在日本,所有的电视都具有两个声道,电视观众看外国影片时可以听原声语言也可以听日语,遥控器上有一个按钮可以用来进行语言选择。在其他国家中,使用的是原始的声音轨迹,配以当地语言的字幕。
除此之外,许多在电视中播放的电影现在也提供英文字幕,使讲英语但是听力较弱的人可以观看。结果,数字电影实际上可能由多个文件组成:一个视频文件、多个音频文件以及多个包含各种语言字幕的文本文件。DVD能够存放至多32种语言的字幕文件。简单的一组多媒体文件如图7-3所示,我们将在本章后面解释快进和快倒的含义。
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

因此,文件系统需要跟踪每个文件的多个“子文件”。一种可能的方案是像传统的文件一样管理每个子文件(例如,使用i节点来跟踪文件的块),并且要有一个新的数据结构列出每个多媒体文件的全部子文件。另一方法是创造一种二维的i节点,使每一列列出每个子文件的全部块。一般而言,其组织必须能够使观众观看电影时可以动态地选择使用哪个音频及字幕轨迹。
在各种情况下,还必须有保持子文件同步的某种方法,这样才能保证当选中的音频轨迹回放时与视频保持同步。如果音频与视频存在即使是轻微的不同步,观众可能会在演员的嘴唇运动之前或之后才听到他说的话,这很容易察觉到,相当让人扫兴。
为了更好地理解多媒体文件是如何组织的,有必要在某种细节程度上了解数字音频与数字视频是如何工作的,下面我们将介绍这些主题。
7.2.1 视频编码
人类的眼睛具有这样的特性:当一幅图像闪现在视网膜上时,在它衰退之前将保持几毫秒的时间。如果一个图像序列以每秒50或更多张图像闪现,眼睛就不会注意到它看到的是不连续的图像。所有基于视频或影片胶片的运动图像系统都利用了这一原理产生活动的画面。
要想理解视频系统,最好从简单且过时的黑白电视开始。为了将二维图像表示为作为时间函数的一维电压,摄像机用一个电子束对图像进行横向扫描并缓慢地向下移动,记录下电子束经过处光的强度。在扫描的终点处,电子束折回,称为一帧(frame)。这一作为时间函数的光的强度以广播方式传播出去,接收机则重复扫描过程以重构图像。摄像机与接收机采用的扫描模式如图7-4所示。(CCD摄像机的成像方式是积分而非扫描,但是某些摄像机及所有的CRT显示器采用的都是扫描方式。)

精确的扫描参数随国家的不同而有所不同。NTSC有525条扫描线,水平与垂直方向的纵横比为4:3,每秒为30(实际为29.97)帧。欧洲的PAL和SECAM制式有625条扫描线,纵横比也是4:3,每秒为25帧。在两种制式中,顶端和底端的几条线是不显示的(为的是在原始的圆形CRT上显示一个近似矩形的图像)。525条NTSC扫描线中只显示483条,625条PAL/SECAM扫描线中只显示576条。
虽然每秒25帧足以捕获平滑的运动,但是在这样的帧率下,有许多人特别是老年人会感觉到图像闪烁(因为新的图像尚未出现以前旧的图像就已经在视网膜上消失)。增加帧率就会对稀缺的带宽提出更多的要求,因此要采取不同的方法。这一方法不是按从上到下的顺序显示扫描线,而是首先显示所有的奇数扫描线,接着再显示所有的偶数扫描线。此处的半帧称为一个场(field)。实验表明,尽管人们在每秒25帧时感觉到闪烁,但是在每秒50场时却感觉不到。这一技术被称为隔行扫描(interlacing)。非隔行扫描的电视或视频被称为逐行扫描(progressive)。
彩色视频采用与单色(黑白)视频相同的扫描模式,只不过使用了三个同时运动的电子束而不是一个运动电子束来显示图像,对于红、绿和蓝(RGB)这三个加性原色中的每一颜色使用一个电子束。这一技术能够工作是因为任何颜色都可以由红、绿和蓝以适当的强度线性叠加而构造出来。然而,为了在一个信道上进行传输,三个彩色信号必须组合成一个复合(composite)信号。
为了使黑白接收机可以显示传输的彩色电视节目,NTSC、PAL和SECAM三种制式均将RGB信号线性组合为一个亮度(luminance)信号和两个色度(chrominance)信号,但是不同的制式使用不同的系数从RGB信号构造这些信号。说来也奇怪,人的眼睛对亮度信号比对色度信号敏感得多,故色度信号倒不必非要精确地进行传输。因此,亮度信号应该用与旧的黑白信号相同的频率进行广播,从而使其可以被黑白电视机接收。两个色度信号则可以以更高的频率用较窄的波段进行广播。某些电视机有标着亮度、色调和饱和度(或者是亮度、色彩和颜色)字样的旋钮或调节装置,可以分别控制这三个信号。理解亮度和色度对于理解视频压缩的工作原理是十分必要的。
到目前为止我们介绍的都是模拟视频,现在让我们转向数字视频。数字视频最简单的表示方法是帧的序列,每一帧由呈矩形栅格的图像要素即像素(pixel)组成。对于彩色视频,每一像素RGB三色中的每种颜色用8个二进制位来表示,这样可以表示224 ≈1600万种不同的颜色,已经足够了。人的眼睛没有能力区分这么多颜色,更不用说更多的颜色了。
要产生平滑的运动效果,数字视频像模拟视频一样必须每秒至少显示25帧。然而,由于高质量的计算机显示器通常用存放在视频RAM中的图像每秒钟扫描屏幕75次或更多次,隔行扫描是不必要的,因此所有计算机显示器都采用逐行扫描。仅仅连续刷新(也就是重绘)相同的帧三次就足以消除闪烁。
换言之,运动的平滑性是由每秒不同的图像数决定的,而闪烁则是由每秒刷新屏幕的次数决定的。这两个参数是不同的。一幅静止的图像以每秒20帧的频率显示不会表现出断断续续的运动,但是却会出现闪烁,因为当一帧画面在视网膜上消退时下一帧还没有出现。一部电影每秒有20个不同的帧,在80 Hz的刷新率下每一帧将连续绘制4次,这样不会出现闪烁,但是运动将是断断续续的。
当我们考虑在网络上传输数字视频所需要的带宽时,这两个参数的重要性就十分清楚了。目前许多计算机显示器都采用4:3的纵横比,所以可以使用便宜的并且大量生产的显像管,这样的显像管本来是为电视市场的消费者设计的。显示器常用的配置有640×480(VGA)、800×600(SVGA)、1024×768(XGA)以及1600×1200(UXGA)。每像素24位的UXGA显示以及25帧/秒,需要1.2Gbps的带宽,即使VGA显示也需要184Mbps。将这些速率加倍以避免闪烁是没有吸引力的,更好的解决方案是每秒传输25帧,同时让计算机保存每一帧并将其绘制两次。广播方式的电视没有使用这一策略,因为电视机没有存储器,并且模拟信号如果不首先转换成数字形式无论如何也无法存放在RAM中,而模数转换则需要额外的硬件。因此,隔行扫描对于广播方式的电视而言是需要的,但是对数字视频则不需要。