视频直播CDN技术

2019/07/16 CDN 网络 技术

视频直播CDN技术

定义

视频

通常我们所说的视频,是指连续的图像变化每秒超过24帧(Frame)画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面,看上去是平滑连续的视觉效果,这样连续的画面叫做视频。

转码

媒体转码是指将一段多媒体包括音频、视频或者其他的内容从一种编码格式转换成为另外一种编码格式。

码率

码率是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。通俗一点的理解就是取样率,单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件,但是文件体积与取样率是成正比的,所以几乎所有的编码格式重视的都是如何用最低的码率达到最少的失真。但是因为编码算法不一样,所以也不能用码率来统一衡量音质或画质。

它是一段数据的组合,是数据传输的基本单位。就是影像动画中最小单位的单幅影像画面,相当于电影胶片上的每一格镜头。一帧就是一副静止的画面,连续的帧就形成动画,如电视图像等。

帧率

每秒显示的帧数,帧率表示图形处理器处理时每秒能够更新的次数。高的帧率可以得到更流畅、更逼真的动画。一般来说30fps就是可以接受的。但是将性能提升至60fps则可以明显提升交互干和逼真感,但是一般来说超过75fps一般就不容易察觉到有明显的流畅度提升了。如果帧率超过屏幕刷新率只会浪费图形处理的能力,因为显示器不能以这么快的速度更新,这样超过刷新率的帧率就浪费掉了。

image-20190714204141209

音频帧一般可以独立解码,可以直接播放。

而视频分为视频关键帧和非关键帧,关键帧可以独立解码渲染,播放器拿到后可以直接看到画面,一般10k以上甚至几十k;其他非关键帧解码依赖于前面的一些视频帧,播放器会根据前面的帧和这一帧(非关键帧)来解码产生画面,非关键帧一般大小是几k甚至不到1k。对于播放器来说,服务器一般会从视频关键帧开始发送,这样才不会产生花屏

对于节点上直播服务器存储的内容,如果是文件加速,节点上存储的内容很明确,就是文件数据,URL不变的话文件数据内容也不变。但是对于直播来讲,传输的就是帧数据,缓存的也是不断变化的帧序列数据。

下面的图里我们可以看到,当前的服务器缓存了 V1-V3 五帧数据,当 V4 这个关键帧出现了,服务器把之前的丢掉,开始缓存 V4 开始的音视频数据,以这个策略保证过来的播放端都是当前最新的数据。一般直播服务器都是用这个策略来进行服务器缓存的。

img

直播和点播的异同

相同点

对于播放端来说,直播和点播都是向服务器获取视频数据,播放端对声音和画面进行播放的过程。从这个角度来讲,直播和点播区别不大。

差异

点播可以选择快进和回退,直播却不能。

直播就是每一帧数据打上时序标签后进行流式传输的过程,发送端源源不断的采集音视频数据,经过编码、封包、推流、再经过分发网络进行扩散传播,播放端再源源不断地下载数据并按时序进行解码播放。如此就产生了边生产、边传输、边消费的直播过程。

我们将视频直播整个流程主要分为几个关键阶段:视频采集、前处理、编码、推流、转码、分发、播放,如下图。

image-20190715182615646

1. 采集

是视频直播开始的第一个环节,用户可以通过不同的终端采集视频,也就是主播直播的过程。

2. 前处理

美颜,水印、模糊特效等。(针对不同的终端要提供不同的处理库)

3. 编码

编码时候我们需要处理硬件兼容性问题和寻求码率和画质之前的平衡。

4. 推流与转码

在数据传输的整个过程中从主播端到服务端,再到边缘节点,以及从边缘节点到播放端。为了让采集端的流适配各个平台端不同协议,一般都会在服务端进行转码处理,将视频文件转成不同格式,支持 RTMP、HLS 和 FLV 等不同的协议。

5. 分发

随着移动直播兴起和游戏直播的持续火热,网络直播平台支持亿级高并发是理论上应该做到的,为了优化终端观看直播的体验,一般都会采用 CDN 进行内容分发加速,实现高并发等能力。

6. 客户端播放

也就是解码和渲染。通常秒开、低延迟等问题是需要在播放端来克服的。

直播架构

img

  • 对于推流端推流,目前主要使用的是 RTMP 协议,播放可以使用 RTMP、HTTP FLV 和 HLS 协议,常用的推流端是 OBS、手机 APP、FFmpeg;播放端包括 Flash、VLC、HTML5、手机 APP 等形式;

  • 视频直播中心拥有稳定的推流上行链路,支持连麦、IM、直播间管理等分丰富的直播服务端实现流能力;

  • CDN 直播分发提供流畅的播放下行链路,700 多个国内节点和 300 多个海外节点,还有丰富的小运营商节点。

  • 对于播放端,我们做了首屏秒开优化和弱网跳帧播放,确保用户体验。

视频直播是非常典型的发布和订阅关系。

从下图可以看到,主播完成发布动作,这条直播内容也就是这一路流推动到服务器,三个观众也就是订阅者,从服务器拉流,也就是用播放动作来完成推流。这种进程内部、节点之间的发布、订阅关系是一种级联的关系,CDN 的直播分发就是依靠这种模式构建。

img

Internet backbone:Internet 骨干网

几台计算机连接起来,互相可以看到其他人的文件,这叫局域网,整个城市的计算机都连接起来,就是城域网。把城市之间连接起来的网就叫骨干网这些骨干网是国家批准的可以直接和国外连接的互联网。其他有接入功能的ISP(互联网服务提供商)想连到国外都得通过这些骨干网。

基础架构

内容通过存储集群到达发布集群,再通过骨干中转环境的 L2,利用 CDN 智能调度到达 L1,也就是距离用户最近的节点,从顺利的推送给用户。

img

Search

    Table of Contents