在HTTP流中,视频只是存储在HTTP服务器中作为一个普通的文件,每个文件有有一个特定的URL。当用户要看视频时,客户与服务器之间创建一个TCP连接并发送HTTP GET请求。
HTTP流具有严重缺陷,即所有客户接收到相同编码的视频。
为此开发出了基于HTTP流的新式流,”经HTTP动态适应性流“(DASH)。
在DASH中,视频编码为几个不同的版本,每个版本具有不同的比特率,用户可以自行选择不同速率的版本,从而优化用户体验。
使用DASH之后,每个视频版本存储在HTTP服务器中,并且各有一个URL。
HTTP服务器也有一个”告示文件“,为每个版本提供一个URL及其比特率。
几乎所有的视频流公司都用到“内容分发网”(CDN)。
CDN可以是“专用CDN”也可以是“第三方CDN”。
在编辑全球的接入ISP种部署服务器群来深入到ISP的接入网种,改善了用户感受的时延和吞吐量,但是成本昂贵。
在少量的关键位置建造大集群来邀请ISP做客,而不是将CDN放到ISP中,该方法节约了大量成本,但是会带来较高的用户时延和较低的吞吐量。
当用户主机的一个浏览器指令检索一个特定的视频(由URL标识)时,CDN必须截获该请求,因为:
1.确定此时适合用于该客户端的CDN服务器集群。
2.将客户的请求重定向到该集群的某台服务器。
一个简单的例子:
假定一个内容提供商NetCinema,雇佣了第三方CDN公司KingCDN来向用户发放视频。
在NetCinema的Web网页上,它的每个视频都被指派了一个URL,该URL包括了字符串”video“以及
该视频本身的独特标识符。
假设我们现在要访问”http://video.netcinema.com/6Y7B23V“这个网页的视频,则系统会执行下面大致六个步骤。
1.用户访问位于NetCinema的Web网页。
2.当用户点击链接”http://video.netcinema.com/6Y7B23V“时,用户主机发送了一个vedio.netcinema.com的DNS请求。
3.用户的本地DNS服务器(LDNS)接收到该请求,并且将该请求发送到NetCinema权威DNS服务器,该服务器观察到主机名video.netcinema.com中的字符串"video"。NetCinema权威服务器并不返回一个IP地址,而是返回一个KingCDN域的主机名,如a1105.kingcdn.com。
4.从这时起,DNS请求进入了KingCDN专用的DNS设施中。LDNS发送向a1105.kingcdn.com的DNS请求,KingCDN的DNS系统向LDNS返回KingCDN内容服务器的IP地址。
5.LDNS向用户返回KingCDN内容服务器IP地址。
6.用户直接跟该KingCDN内容服务器建立TCP连接,并且发送HTTP请求,获得视频流。
任何CDN部署,其核心是”集群选择部署“,即动态的将客户重定向到CDN中的某个服务器集群中的某个服务器。
第一种简单的策略是:
将用户重定向到地理位置最近的CDN上,但是该方法存在弊端。
例如客户端LDNS距离客户很远的时候,那么就会造成很大的时延。
再比如忽略了时延和可用宽带随因特网路径时间而变化,并且总是为该用户重定向到这个集群,就会造成某个时间点上,用户的体验极差!
第二个策略是:
CDN能够对其集群和客户之间的时延和丢包性能执行周期性的实时测量。
例如CDN向每个集群周期性的发送探测分组(Ping请求或者DNS请求)。
但是该方法也存在缺点,那就是有些LDNS可能会拒绝回应这些探测分组。