用户请求到直播CDN服务回源拉流开始的时候,开始动态的检测收到的音视频数据,并且会定时(1s钟执行一次定时器)的去统计音视频数据的delay情况,并且用delay时长根配置的阈值做比较,来判断源站是否异常,这样既能在源站异常不发送数据的情况下检测到异常,也能在源站偶尔发送一些数据的情况下检测出异常,使异常切换更加的及时,从而能在用户感知到卡顿之前,通过切换源站恢复正常,从而提高用户的体验。
在回源拉流过程中,动态的检测音视频数据的delay延时,通过单位时间内收到的音频数据a_delay,视频数据v_delay跟单位时间做对比,根据设置的delay阈值控制回源连接的断开,当a_delay或者v_delay超过阈值之后断开回源连接,重新连接另外的源站,为了防止频繁的断开重连,还设置了超时阈值,即两次delay切换时间需要超过阈值,才会进行下一次切换,从而能很好的解决多个源站情况下如果其中某个源站出现问题,包括网络,服务异常等,能快速的切换到其他正常的源站,而且客户端基本无感。
首先,当直播用户请求到直播服务如果没有流会进行回源,回源成功之后会实时的收到音视频数据,因为直播流是实时的流式数据,所以在不考虑缓存的情况下,收到的数据量理论上应该和回源的时长一直,如果出现收到的音视频数据小于回源的时长,那说明音视频数据存在delay,出现delay的原因主要有两种,第一是由于网络原因导致源站的数据发送不及时导致;第二主播网络异常推流数据本身就存在延时;该方法主要是解决由于源站网络原因或者异常导致的数据发送不及时的问题,当收到的数据延时不断的累计,达到设定的阈值之后,就会触发断连逻辑,关闭本次回源连接,重新回其他源站,从而解决由于源站本身问题导致的卡顿。
其次,为了防止频繁的断连切换还增加了delay切换超时间隔阈值,即第一次由于delay回源断开到下一次由于delay回源断开的时间间隔需要大于阈值,这样能有效的控制由于流本身问题导致的频繁切换的问题,防止使卡顿变得更加严重。
除此之外,这种方案还能在一定程度上解决连接网络慢速的问题导致的卡顿。