CDN编码器将视频源内容编码为多个码率的视频文件。切片服务器将每个码率的视频文件都切片为时间相同的多个小文件,生成相应的索引文件,将这些小文件和索引文件都注入到CDN上级节点。CDN内部完成小文件和索引文件的分发,推送到CDN下级节点。客户端通过网页或者 EPG 上的 URL 地址(已指向 SLB)请求索引文件,例如http://slb.example.com/test.m3u8。
SLB 根据用户 IP 地址、节点负载、网络流量等综合信息将用户重定向到合适的CDN下级节点,获取索引文件。客户端根据索引文件中的切片信息,请求第一个视频片段,例如http://slb.example.com/gear1/file200000-0.ts。SLB 再根据用户综合信息将用户重定向到合适的CDN编码器下级节点获取第一个视频片段。客户端重复上述过程,请求后续视频片段,更多相关知识:http://www.zhengdaole.com/。
本节介绍的优化方案是在透明传输方案基础上,对CDN编码器下级节点进行扩展,使CDN下级节点在收到CDN编码器上级节点推送的索引文件和视频片段时,对索引文件进行更新,将索引文件中所有视频片段的URL地址替换为CDN下级节点的地址,从而让客户端请求每个视频片段时都绕过SLB直接向CDN下级节点请求服务。
具体流程(CDN下级节点收到CDN上级节点推送的索引文件和视频片段后,对索引文件进行更新,替换视频片段的URL地址,例如将http://slb.example.com/gear1/file200000-0.ts替换为
http://183.92.77.205/gear1/file200000-0.ts(183.92.77.205是此CDN下级节点的地址)。客户端获取索引文件仍需请求SLB,经过SLB重定向后在CDN下级节点获取到更新之后的索引文件,客户端通过索引文件内更新后的视频片段URL地址直接向CDN编码器下级节点请求各个视频片段。
优化方案通过CDN下级节点更新索引文件,实现了CDN编码器内部的优化调度,只需在获取索引文件时向SLB发起一次请求,后续请求视频片段与SLB无关,大大减轻了SLB的负担。但优化方案需要升级CDN下级节点以支持更新索引文件,要进行相应的开发。因此笔者建议在自适应流媒体内容占比较少的CDN中采用透明传输方案,SLB负载影响不大,而且无需改动现有CDN功能,优先保证系统稳定性;在以自适应流媒体内容为主的CDN中,则必须采用优化方案,减轻SLB负载,优化CDN调度策略,保证用户体验。