随着直播业务的大众化,直播过程中的技术也面临着越来越多的挑战。而延时影响用户体验的一个十分重要的因素。
直播过程中的延时是指从主播端采集,到观众端播放之间的时间差,主要来源于网络传输中的延时、网络抖动、网络丢包等等情况,短则 1s-2s, 长则 15 以上,严重时可导致用户无法观看,所以解决直播延时问题一直是技术亟待解决的痛点。
我们知道 PCDN 是以 P2P 技术为基础,通过挖掘利用边缘网络海量碎片化闲置资源而构建的内容分发网络,它具有低成本、高品质的特点,十分适用于视频直播这一业务场景。针对直播中延时的情况,PCDN 也进行了一系列优化,近期上线了 flash 无延时直播方案,下面我们将来介绍下无延时直播方案的技术原理和实现。
第一,切片大小是影响延时的直接因素,无延时直播的切片小,避免了因为切片过大的原因出现播放延时,同时 P2P 传输不会分包,提高传输效率。
第二,无延时直播采用订阅 / 推送模式,订阅子流,推送模式进行分享调度,满足直播的实时要求。
第三,当订阅 / 推送模式在 peer 退出时出现切片空洞,则使用快速补片的方式保证数据连续性和播放流畅度。
1、主播通过 rtmp 协议将直播流推送到阿里 CDN
2、切片服务通过 rtmp 协议从阿里 CDN 拉取直播流并进行切片
3、阿里 CDN 再通过 http 协议拉取切片流,最终通过 websocket 协议分发到 PCDN 网络
第一,切片类型不同
有延时直播切片按照时间切片,切片时长可配置,基本是在 1s 或 500ms;
无延时直播切片按照大小切片,默认是 1KB。
第二,分发类型
有延时直播,按照点播文件分发,每个切片都是单独的文件;
无延时直播,按照流式分发,与 CDN L2 节点维持长连接,通过 http 协议流式传输。
第三,CDN L1 节点与终端传输协议不同
有延时直播是 http 协议,不支持持久连接
无延时直播是 websocket 协议,支持持久连接
我们可以看出,无延时直播方案是从直播流实时处理和传输分发等层面分别进行了优化,从而实现了流畅的直播用户体验。
第一,可以支持大直播场景(重要赛事、大型活动、在线教育),服务端可以支撑上百万的同时在线量。
第二,P2P 智能调度,可以从上百万的 peer 中选择与当前 peer 连通性最好的一批 peer,确保更精准、更快速的数据传输。
第三, 支持热点自发现,仅为热点直播提供 P2P 服务,最大程度提升 P2P 效率,帮助用户节省成本。
第四,指标表现优异:平均延时小于 1s , 和 CDN 相比无延时,直播流畅率 > 99%,同时 P2P 分享率可达 30%-60%。
感兴趣的用户, 可以在官网申请书使用 ,通过播放器加载 SDK,SDK 提供出 LiveStream 类,该类继承自 flash.net.NetStream,播放器可使用 NetStream 类调用 play 函数播放对应的直播流,实现 flash 无延时直播。
来源: https://yq.aliyun.com/articles/310656