在youku和pplive上看视频时,用户可以可以选择“标清”、“高清”或“超清”,原理比较好理解,对于同一个片子,在视频库存储着标清、高清和超清3个码率的版本,3个版本均按照时长切割成相同数量的数据片,用户选择高清时,播放器就加载对应时长上的高清片,选择超清时就加载对应时长上的超清片。这样一来用户就可以根据自己当前的网络状况和视频流畅性选择合适的视频播放模式。但即便是这样,MP4协议还是有他的美中不足:
1、智能程度不够,不能对网络状况进行自检测,然后自动切换到当前环境下的最高码率;
2、缓冲时间长,在视频开始时,播放器会选择尽可能高的码率,导致加载第一个视频片得时间长,缓冲慢。
苹果公司的创意可不是吹出来的,他搞出来了一个HLS协议,其最大的特点是支持动态码率,具体实现情况如下:
1、同MP4一样,针对不同的码率将视频切片成若干个版本,比如350K,700K,1.5M;
2、将上述切片信息组织成一个profile文件;
3、视频启动时,播放器加载并解析profile文件;
4、播放器首先从最低码率(350K)的版本中加载第一片,由于码率低,数据量小,故缓冲时间短;
5、视频播放稳定后,播放器自动检测网络状况,若发现网络状况很好,则后续会选择高码率的视频片,慢慢过渡到最高码率;
同理,若发现网络状况不佳,则会慢慢过渡到低码率的视频版本。形象一点的说法就是,视频一会儿清晰一会儿不清晰,
但比较流程。
总的说来,HLS在优先考虑流畅性的前提下支持码率的自动切换。相比于MP4确实有其先进之处,但该协议对客户端播放器提出了更高的要求,需要播放器去解析profile信息,对于一些比较低端的客户端还是有些吃不消的。
最近项目中用到这个协议,更深入的东西有待研究。