近年来互联网上基于视频、音频的流媒体应用呈飞速发展的趋势。互联网,即广域网、局域网及单机按照一定的通讯协议组成的国际计算机网络。互联网是指将两台计算机或者是两台以上的计算机终端、客户端、服务端通过计算机信息技术的手段互相联系起来的结果,人们可以与远在千里之外的朋友相互发送邮件、共同完成一项工作、共同娱乐。计算机与网络是继造纸和印刷术发明以来,人类又一个信息存储与传播的伟大创造,称为第五次信息革命。 通常,网络与网络之间所串连成的庞大网络,则可译为“网际”网络,又音译因特网或者英特网,在1990年代发展初期,因其跨国际性连接之特性,在***亦有人称其为国际网络,或国际电脑网络。是指在ARPA网基础上发展出的世界上最大的全球性互联网络。而互联网(英语:international network或internet),在***译作网际网路,或称互连网,即是“连接网络的网络”,可以是任何分离的实体网络之集合,这些网络以一组通用的协定相连,形成逻辑上的单一网络。这种将计算机网络互相联接在一起的方法称为“网络互联”。
阻碍流媒体发展的因素主要是带宽问题,包括服务器磁盘带宽和网络带宽,二者中相对较小者决定了系统服务用户的数目。流媒体传输技术面临如此多的挑战,从而吸引许多学者在这方面进行研究,并取得了一定的成果。
对流媒体传输技术的研究主要涉及:(1)服务器流调度技术。(2)代理缓存技术。(3)节目替换算法的研究。
1 服务器流调度技术
在统计分析过程中,人们发现节目点播情况服从Zipf(齐夫)法则,即对N部电影按访问概率从大到小进行排序为M1,M2,……Mn,第i部电影的访问概率pi=P{X=Mi}(i=1,2,……n)满足:
针对VOD的统计表明,大量用户的点播往往集中在少数热门节目上。当大量用户点播相同节目时,可以把用户的请求合并,通过组播通道传输媒体流,节约视频服务器磁盘I/O带宽和网络带宽。这种思想正是流媒体调度技术的基础[3]。
流媒体调度算法分为两类:(1)静态调度算法是指服务器主动把节目在一系列组播通道中播放媒体流。(2)动态调度算法是指用户点播驱动,服务器根据调度算法来为用户调度媒体流。
1.1 静态调度算法
在阶段广播和周期性广播算法中,服务器在规定间隔后开始发送节目媒体流,它的延时取决于请求在间隔内的到达点。其问题在于虽然提高了服务器带宽利用率,但是它强迫用户端增加延时。
分段广播系统包括金字塔和摩天大楼算法等。这些系统不是在一个流中广播一个节目,而是把节目分段,在每个流中广播一个段。
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和> )和shell通配符(*、?、[、])在内。如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。利用set args 命令就可以修改发送给程序的参数,而使用show args 命令就可以查看其缺省参数的列表。
1.2 动态调度算法
流媒体动态调度算法包括FCFS算法、Batching算法、Adaptive Piggybacking算法、Stream Tapping、补丁算法(Patching)、受控组播算法、Catching and Selective Catching、BandWidth Skimming、分片融合、层次型组播流聚合等。
(1)最简单的动态调度算法是FCFS算法,该算法按照用户请求“先来先服务”的原则,可以实现简单的TvoD系统,算法简单实用,可以支持VCR功能,但是资源消耗过大。
(2)在Batching 算法中,当几个用户在相近的时间内点播同一部节目时,服务器把他们的请求聚合在一起,绑定到一个组播流中。Batching 算法可以有效地利用系统资源。但是它增大了用户的启动延时,且该算法不能支持用户VCR功能。
(3)Adaptive Piggybacking算法中,节目的播放速度调节为原来的正负5%以使两个流能聚合成一个流。一旦两个流到达节目的同一个点,其中一个流即被释放,用户切换到现存的流中。
(4)Stream Tapping算法中,利用客户缓冲区使客户加入服务器现存的流中,以便从多个流中取得数据。使用这种方法可以节约服务器带宽资源,降低客户延时,但是它要求客户有足够的接收带宽来同时接收多个流。
(5)补丁算法的基础是Batching算法,它利用组播媒体流服务多个用户。用户可以利用本地缓冲同时从多个组播流中取得数据,用户没有启动延时。同时系统可以尽可能地合并用户请求来提高系统的效率。
(6)受控组播技术与补丁算法相似,允许两个点播同一节目的客户共享同一通道。与补丁算法的区别是:它不会为了提高共享而延迟先到客户的点播请求,而是通过允许后来的客户共享先到的客户的组播流,从而满足客户要求。然而受控组播技术并不是在任何可能的时候都允许客户加入正在进行的组播会话。使用一个域值来控制何时开辟一个新的组播会话。优化的域值可以最小化服务器的通道数目。受控组播在低点播率时提供较好的性能。
(7)分片融合是一个在补丁基础上支持VCR功能的算法。当用户执行交互功能时,它将从组播通道中退出,系统重新为它分配单播通道来进行服务,直到它能和现有的组播流聚合。
(8)Catching技术比较适合热播节目。该技术的高效性体现在它智能地结合了服务器和客户端的发送功能。在此技术中,一个视频节目在一些通道中循环组播。想要观看该节目的用户可以立即加入合适的组播通道,无须等待下一个广播周期。同时客户向服务器发送请求来取得错过节目的开始部分的数据(前缀)。前缀通过单播通道发送,客户可以马上观看。另一方面,从组播通道取得的数据暂时缓存在客户端,直到回放结束。这样通过客户端和服务器的模式Catching策略可以最小化启动延迟。受控组播技术采用客户端的模式,比较适合冷门节目。Catching是一种基于参数的策略,它的通道需求为点播率和文件大小的对数。
2 代理缓存技术
代理技术的研究主要包括:缓存策略、代理缓存结合服务器调度技术、分段分布式代理的研究。
2.1 缓存策略
(1)全部缓存策略:缓存整个流行度高的节目数据,这种方法效率不高,特别是在代理缓存空间有限时尤为突出,缓存需要频繁的换入换出,缓存一个巨大的节目代价是昂贵的,所以很难提高点播的命中率,同时也很难降低代理-服务器之间的网络流量。正在进行的流不能被删除,这会使缓存替换算法替换掉本来不应该被替换的节目,进而偏离优化点。
(2)部分缓存策略:可以降低用户点播的启动延时,也可以利用缓存的前缀来做一些提前平滑及丢包重传的处理。但是由于大量后缀数据要从服务器取得,所以不能从本质上降低代理到中心服务器之间的网络流量和服务器的负担。该方法的侧重点是解决服务延时,服务器负载巨大和网络带宽的问题,缓存空间需要非常巨大。
(3)滑动窗口策略:没有用户点播请求时,代理服务器不缓存任何数据。当第一个用户请求到达时,代理服务器向中心服务器请求数据,代理服务器预测将来可能还有请求,缓存w分钟的数据,数据的生命期就是窗口的大小。所以从第一个请求开始,w分钟内到达的请求都可以用这个窗口的数据来服务,这个窗口之外的请求将要再次启动网络传输。
(4)分层编码视频的缓存策略:针对分层编码的流媒体来决定应该缓存哪一个节目的哪一层,才能最小化传输代价。主要的挑战是根据客户所拥有的不同可用带宽进行质量调整后,用不同质量的缓存流来响应。该策略中的预取算法和适合分层编码的细粒度的缓存替换算法,能根据节目的流行度对缓存状态进行调整。
2.2 代理缓存结合服务器调度
典型的缓存前缀有许多优点,例如:掩盖代理与服务器之间的延时抖动、启动延时、减少网络传输,可以实现在线平滑。中心服务器使用组播和广播技术可以降低服务器负载和网络传输。
一种闭环(点播驱动)控制的方法被称为Multicast with Caching(MCache)。MCache的中心思想是利用Batching、Patching和代理前缀缓存技术。Batching补丁的请求是本策略的独特特点。使用区域的缓存服务器来缓存前缀以降低启动延迟。MCache的特点在于组播开始后的请求仍旧可以聚合起来,通过组播补丁来达到没有启动延迟。
另一种结合服务器调度和代理前缀缓存或部分缓存的策略是在给定缓存容量时,最小化主干网络上的传输量。它不但存在一个选择前缀集合的优化算法,而且可以动态缓存补丁数据和RC的数据。
结合代理前缀缓存和视频后缀数据服务器周期广播的调度策略。该策略的思想是不同代理可以根据用户和节目流行情况采用合适的前缀传输策略。另一种方案是结合部分缓存和Batch Pathing 的策略。
2.3 分段分布式代理
MiddleMan是由局域网联结起来的协同工作的代理服务器集合。MiddleMan由两部分组成:代理服务器和协调器(Coordinators)。典型的配置包括一台协调器和多台代理服务器,它们通过LAN互联。协调器跟踪代理服务器上保存的内容,做出缓存替换决定。MiddleMan存储系统中把视频文件平均分成大小相等的文件块,把它们在所有代理之间分布,使视频看起来是由一系列顺序的文件块组成。
MiddleMan提供和评估了基于分断存储大媒体流的代理管理方法。代理服务器接收到的媒体流块数据按可变大小的段组织,缓存接纳控制和替换策略为每个段添加不同的缓存值。前缀只能替换原来缓存的前缀,后缀只能替换原来的后缀。结果表明:(1)基于分段缓存不但可以提高命中率(降低全部的网络传输),而且可以降低请求的开始延时;(2)基于分段缓存在缓存空间有限以及热播节目变化频繁、媒体文件巨大以及用户经常只观看节目开始部分时具有特别的优势。
一些视频服务器提供了VCR功能,但它需要经历很大的延时和大量的处理。另外用户也不知道视频的大致内容以及感兴趣部分的精确位置,同时也浪费了网络资源。结合交互式视频发送和缓存系统并使用视频分析和抽象技术设计了一个视频代理系统,可给用户提供一个良好的观看环境。视频数据分段存储在多个代理上来进行负载均衡,同时也允许实现细粒度的替换策略。前缀缓存是只缓存每个视频段的前缀,所以预取也能减低延时。
3 节目替换算法
传统的替换算法主要应用于大小相等的对象、传统的内存以及Web应用的替换算法不适用于流媒体领域。LRU是Least Recently Used最近最少使用算法。Oracle系统使用的一种算法,对于在内存中但最近又不用的数据块(内存块)叫做LRU,Oracle会根据那些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。关于操作系统的内存管理,如何节省利用容量不大的内存为最多的进程提供资源,一直是研究的重要方向。而内存的虚拟存储管理,是现在最通用,最成功的方式—— 在内存有限的情况下,扩展一部分外存作为虚拟内存,真正的内存只存储当前运行时所用得到信息。这无疑极大地扩充了内存的功能,极大地提高了计算机的并发度。虚拟页式存储管理,则是将进程所需空间划分为多个页面,内存中只存放当前所需页面,其余页面放入外存的管理方式。然而,有利就有弊,虚拟页式存储管理减少了进程所需的内存空间,却也带来了运行时间变长这一缺点:进程运行过程中,不可避免地要把在外存中存放的一些信息和内存中已有的进行交换,由于外存的低速,这一步骤所花费的时间不可忽略。因而,采取尽量好的算法以减少读取外存的次数,也是相当有意义的事情。
目前提出的RBC算法在缓存接纳和替换时考虑了文件大小和所需的发送带宽因素。Pooled RBC策略进一步提高了RBC算法的性能。它提供一个带宽POOL,当一个点播请求到达时,从带宽POOL中为该用户分配流。发送完毕要收回已经分配的带宽归还给带宽POOL。如果点播请求不能分配足够的带宽,则POOL RBC把请求转交给原始服务器,而不是简单地替换实体来释放带宽。实验结果表明,在大多数情况下这个策略明显比RBC容易实现。而Hybrid LFU/Interval Caching策略的性能比Pooled RBC和LFU都优越。LFU/IC是一个结合LFU和Interval Caching的技术。Interval Caching算法主要研究在内存中缓存部分节目流。
LRU算法不能区别经常和不经常使用的对象。LRU-K算法仔细检查使用对象最近K次被引用的信息。本文使用考虑最近2次引用信息的算法叫作LRU-2,更一般的是LRU-K算法。典型的LRU算法相当于这里的LRU-1算法。LRU-K包含内在的“老化”含义,考虑了对象的最近K次引用,然而LRU算法不能很好地处理不断演化的引用模式。LRU-K算法有以下显着的特点:①能很好地区分不同级别引用对象的集合。②可以通过自调节来适应不同的引用模式。③产生很少的管理负担。通过2Q算法可对LRU-K进行改进。它引进两个管理队列来简化LRU-K的管理负担。
LRU和LFU分别是考虑近期性和使用频率的两个极端。LRFU(Least Recently/Frequently Used)策略统一考虑频率和近期性,在两者之间进行折中。LRFU算法中为每个块分配一个CRF(Combined Recency and Frequency),这个CRF值代表该对象将来被点播的可能。过去的每次引用对该值的贡献由一个权值函数F(x)来衡量。F(x)是一个单调降函数,x代表当前时刻。
Segmented LRU是基于频率对基本LRU进行扩展,它是为页缓存设计的,页的大小均相等。Segmented LRU基于这样的观察:在很短一段时间内使用两次的对象比只使用一次的对象流行度高。在Segmented LRU中缓存空间分为两部分:可能段和保护段。新对象(使用一次)首先进入可能段,使用两次以上的段进入保护段。当整个缓存空间满时,可能段中的最近最少使用的对象将被替换掉。为了尽量减少与理想算法的差距,产生了各种精妙的算法,最近最少使用页面置换算法便是其中一个。LRU算法的提出,是基于这样一个事实:在前面几条指令中使用频繁的页面很可能在后面的几条指令中频繁使用。反过来说,已经很久没有使用的页面很可能在未来较长的一段时间内不会被用到。这个,就是着名的局部性原理 ——比内存速度还要快的cache,也是基于同样的原理运行的。因此,我们只需要在每次调换时,找到最近最少使用的那个页面调出内存。
The Size-Adjusted LRU把缓存的所有对象按cost-to-size(1/(Si*ΔTit))排序,这里Si是对象I的大小,ΔTit是自从上次使用以来经历的时间。它只是贪婪地把cost-to-size最小的对象删除。实际应用中对象按Si*ΔTit重新排序,具有较大索引的对象在替换时逐一被清除掉。
更进一步,为了避免计算所有对象的cost-to-size值,一个近似的算法叫做Pyramidal Selection Scheme(PSS),对象按log2(size)分为有限的组,同一个组中对象大小相似。每个组中使用LRU机制。
4 小 结
本文归纳总结了当前流媒体传输领域的一些流行的技术,并对它们进行分类。目前看来,各种技术都只能解决部分问题,并且都有自己的缺陷。因此目前还没有完善的流媒体传输解决方案。我们期待将来随着计算机和通信技术及流媒体领域各种相关技术(视频压缩、传输协议等)的发展,会出现更好的流媒体解决方案,使流媒体得到更广泛的应用。
全部0条评论
快来发表一下你的评论吧 !