7.7.3 近似视频点播的文件存放

到目前为止我们已经了解了视频点播的文件存放策略。对于近似视频点播,采用不同的文件存放策略可以获得更高的效率。我们还记得,近似视频点播将同一部电影作为多个交错的数据流送出。即使电影是作为连续文件存放的,每个数据流也需要进行寻道。Chen和Thapar(1997)设计了一种文件存放策略几乎可以消除全部这样的寻道。图7-21说明了这一方法的应用,图7-21中的电影以每秒30帧的速率播放,每隔5分钟开始一个新的数据流(参见图7-17)。根据这些参数,2小时长的电影需要24个当前数据流。

阅读 ‧ 电子书库
图 7-21 针对近似视频点播的优化帧存放策略

在这一存放策略中,由24个帧组成的帧集合连成一串并且作为一个记录写入磁盘。它们还可以在一个读操作中被读回。考虑这样一个瞬间,数据流24恰好开始,它需要的是第0帧,5分钟前开始的数据流23需要的是第9000帧;数据流22需要的是第18 000帧,以此类推,直到数据流0,它需要的是第20 700帧。通过将这些帧连续地存放在一个磁道上,视频服务器只用一次寻道(到第0帧)就可以以相反的顺序满足全部24个数据流的需要。当然,如果存在某一原因要以升序为数据流提供服务,这些帧也可以以相反的顺序存放在磁盘上。完成对最后一个数据流的服务之后,磁盘臂可以移到磁道2准备再次为这些数据流服务。这一方法不要求整个文件是连续的,但是对于若干个同时的数据流仍然给予了良好的性能。

简单的缓冲策略是使用双缓冲。当一个缓冲区正在向外播放24个数据流的时候,另一个缓冲区正在预先加载数据。当前操作结束时,两个缓冲区进行交换,刚才用于回放的缓冲区现在在一个磁盘操作中加载数据。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

一个有趣的问题是构造多大的缓冲区。显然,它必须能够装下24个帧。然而,由于帧的长度是变化的,选取正确大小的缓冲区并不完全是无足轻重的事情。使缓冲区大到足以装下24个I帧是不必要的过度行为,但是使缓冲区大小为24个平均帧则要冒风险。

幸运的是,对于任何一部给定的电影,电影中最大的磁道(在图7-21的意义上说)事先是已知的,所以可以选择缓冲区恰好为这一大小。然而,很有可能发生这样的事情,最大的磁道有16个I帧,而第二大的磁道只有9个I帧。选择缓冲区的大小能够足以装下第二大的磁道可能更为明智。做出这样的选择意味着要截断最大的磁道,因此对某些数据流将舍弃电影中的一帧。为避免低频干扰,前一帧可以再次显示,没有人会注意到这一问题。

进一步运用这一方法,如果第三大的磁道只有4个I帧,使用能够保存4个I帧和20个P帧的缓冲区是值得的。对某些数据流在电影中两次引入两个重复的帧可能是可以接受的。这样做下去何处是头呢?也许是缓冲区大小对于99%的帧而言足够大就行了。显然,在缓冲区使用的内存和电影的质量之间存在着权衡。注意,同时存在的数据流越多,统计数据就越好并且帧集合也越均匀。