直播 CDN 分发网络(基本业务)
传统直播一般是基于 CDN 网络进行分发,可支持大规模并发(并发数取决于 CDN 网络容量)。与传统 CDN 的大文件,小文件分发不同,由于主播分布区域分散,一般除了提供播放端的下行分发网络外,还提供上行主播推流汇聚网络。只有一些直播内容资源集中的业务方,会要求直播 CDN 直接回自己的源站,如电视台。
上行汇聚
目前传统直播 CDN 上行一般使用 RTMP 协议,当然也有一些使用 UDP(UDP 方式由于需要 SDK 配合,目前行业内有人在做,但是需要绑定 SDK)。另外国外还有使用 http-ts 的方式进行推流的,可参见 nginx-rtmp 项目大神开源的 nginx-ts-module。当然,目前使用这种方式,关键问题还是在于端的支持问题,而该开源项目目前只支持 HLS 和 Dash 的播放。
除了主播推流以外,还有一种方式即从汇聚点到业务方源站去拉流的方式
下行分发
目前下行分发一般使用的协议,rtmp,http-flv,hls 三种协议。这三种协议的优劣,网上已经有很多文章了,一般从终端兼容性,延迟,首屏几个维度去考虑,这里就不在进行比较。
rtmp 和 http-flv
由于 rtmp 协议在发送数据前交互次数较多,比较追求首屏的直播平台一般都会选择 http-flv 协议作为下行分发协议,线上环境测试效果平均会增加 100-200 ms 左右的时间,网络越差,这个值越大。
rtmp 和 http-flv 的延迟可以做到 3s 以内,但是由于网络环境的复杂,过低的延迟会导致卡顿率的提升,所以一般 CDN 会用户接入时,给用户多发几秒钟的数据(一般是 5-8s),填充播放端缓冲区,来抗网络端的抖动。细节技术会在后面的文章中介绍
hls
hls 对 Android