关于视频分段下载的疑问?


最近看youku的视频发现很多大的视频是分段下载的,我想知道的是flash是不是开多个线程同时下载,而且在服务端是否把一个大视频分割成多个小文件才能段下载?而且这种分段下载有什么好处?因为网速就那么快,视频分段和顺序下载相比有什么优势?

视频 flash 存储

蹦达的宇宙人兔 11 years, 11 months ago

视频分段的目的并非是为了让用户多线程下载,恰恰是为了不让用户过快地下载。HTTP协议毕竟不是流媒体协议,很难控制视频传输的速度,设想一个用户在看了整部视频的1/3的时候,决定不看了,可是由于用户的网速很可能快于视频的码流,这时整部视频也许已经全部下载完毕了,那么多下载的2/3流量就被浪费了,这对于目前带宽是主要成本的视频网站来讲显然是不可接受的。因此把视频分段,并在一个视频片段快看完的时候,再去下载下一段视频,是一种简便并且高效的流控手段。

另外一个作用是为了CDN缓存的需要。视频文件普遍比较大,在缓存进内存的时候,会消耗大量的资源,如果缓存节点有多个不同视频文件在被观看,那么把这些文件全部读进内存有可能使系统资源耗尽。只把那些正在被观看的片段缓存起来显然效率更好。

视频服务一般不允许多线程下载,他们的CDN节点遍布全国,带宽和延迟都很有保障,所以没有必要使用多线程下载。把大文件分成多段也不是分段下载的必要条件,保持一个大文件,同时分段请求不同的文件位置也是可以的,只是flash能不能实现就不知了。

补充 @邵辉 评论

关于视频分段提高CDN缓存效率,还可以设想这样一个简单的模型:一部热播电影上线,视频文件尺寸有1G,装载到一个10台服务器的CDN节点上,有数百个用户同时线观看,由于视频网站大都采用了点播的模式,每个用户观看的进度都是不一样的,如果不采用分段的模式,那么你可能需要把视频文件分发到10台服务器上以均摊负载,每个文件都需要被全部缓存,总共消耗10G的内存。如果把视频分成10段,分别放到10台服务器上来均摊负载,总共就只需要1G内存,差别是9倍。考虑到视频网站同时会有多部影片在被用户观看,不可能所有的视频文件全都装载到内存中,会有大部分视频文件保存在磁盘上,在需要时才被load进内存,那么内存的成倍节省就意味着Memory Hit Ratio的大幅提升,这是一个Cache Server的最重要指标,也是所有CDN系统运行效率的关键。上面只是模型,实际的视频CDN系统未必是这样,有些解决方案不再使用Cache Server,而改用Web Server+Page Cache的方式,效率可能更好,但是分段仍然是提高系统整体效率的有效办法。

mizia answered 11 years, 11 months ago

Your Answer