当前位置: 首页 > 科技观察

视频基础知识及直播系统架构

时间:2023-03-22 14:25:36 科技观察

通常我们所说的视频是指每秒超过24帧(Frame)的连续图像变化。根据视觉暂留原理,人眼无法分辨出单一的静态图像画面呈现出平滑连续的视觉效果,这样的连续画面称为视频。媒体转码是指将一段包括音频、视频或其他内容的多媒体从一种编码格式转换为另一种编码格式。其中,内容分发网络就是我们常说的CDN,主要包括流媒体服务器、负载均衡、路由重定向、视频转码、视频录制存储、防盗链、性能等相关技术内容。本文主要从直播概况、直播架构、业务功能和场景来介绍阿里云CDN直播系统。一、视频相关词汇介绍在讲解直播CDN技术之前,我们先来了解一些视频直播相关词汇。码率:数据传输时单位时间内传输的数据比特数。一般使用的单位是kbps,即每秒千位。通俗的理解就是采样率。单位时间的采样率越大,精度越高,处理后的文件越接近原始文件。但是文件体积是和采样率成正比的,所以几乎所有的编码格式都会关注它。这一切都是关于如何使用最低的比特率来实现最少的失真。但是,由于编码算法不同,不能用码率来统一衡量音质或画质。帧:是一段数据的组合,是数据传输的基本单位。它是视频动画中最小单元的单个图像帧,相当于电影胶片上的每一帧。一帧是静止画面,连续的帧构成动画,如电视画面。帧率:显示每秒的帧数,帧率表示图形处理器每秒可以处理场的更新次数。高帧率会产生更流畅、更逼真的动画。一般来说,30fps是可以接受的,但是提高到60fps可以明显提升交互感和真实感,但一般来说,超过75fps就不容易察觉到流畅度有明显提升。如果帧率超过了屏幕刷新率,那只会浪费图形处理能力,因为显示器无法以这么快的速度更新,所以超过新速率的帧率就被浪费了。音频帧一般可以独立解码,现场播放。视频分为视频关键帧和非关键帧。关键帧可独立解码渲染,玩家拿到后直接看到画面,一般10K以上,甚至几十K;另外非关键帧的解码依赖于之前的一些视频帧,播放器会根据之前的帧和本帧解码生成一张图片,而非关键帧的大小一般在几K甚至不到1K。对于播放器来说,服务器一般会开始发送视频关键帧,这样就不会出现花屏的情况。对于节点上直播服务器存储的内容,如果是文件加速,节点上存储的内容很明确,就是文件数据,如果url不变,文件数据的内容不会改变.但是对于直播来说,传输的是帧数据,缓存的也是变化的帧序数据。如下图可以看到,当前服务器已经缓存了五帧V1-V3数据。当V4关键帧出现时,服务器丢弃之前的,开始缓存从V4开始的音视频数据。是最新的数据。一般直播服务器采用这种策略进行服务器缓存。常见的CDN加速服务包括文件加速、视频点播、直播等。一开始阿里云CDN是做文件加速起家的,主要针对内部客户,比如淘宝,图片比较多,支持小文件加速。随着各BU终端产品的衍生,将逐步支持大文件下载业务。当阿里云CDN作为产品正式商用后,将开始支持按需服务。2015年下半年,开始扶持直播业务。2.直播概述视频直播常见的两种形式是手机直播和游戏直播。典型的手机直播平台有手机淘宝、陌陌、映客等,游戏直播有斗鱼、全民TV等平台。其实对于播放端来说,直播和点播都是从服务器获取视频数据,播放端播放声音和画面的过程。从这一点来看,直播和点播并没有太大区别。直播与视频点播的区别对于视频点播,用户在观看时可以随时选择快进快退,而直播则不能。视频网站的视频文件,点播可以选择今天或明天观看,但不能选择直播时间,就像每个周末的联赛都是固定时间进行的。有的机顶盒提供回看功能,也是点播的。简而言之,直播就是将每一帧数据都打上时序标签的串流过程。发送端不断采集音视频数据,经过编码、打包、流化,再通过分发网络传播,播放端不断下载数据,按时序解码播放。这样就产生了一个生产、传播、消费的直播过程。我们将视频直播的整个过程分为几个关键阶段:视频采集、预处理、编码、推流、转码、分发和播放。下图是简化直播系统的基本结构,后面我们会详细展开。1、收藏是视频直播中的第一个环节。用户可以通过不同的终端采集视频,这就是主播直播的过程。iOS端适配性更好,收集起来也比较简单。Android端,由于市面上机型多版本情况复杂,一个库适配所有硬件难度较大,收集难度相对较大。PC端与摄像头驱动息息相关,目前市面上最好用的PC端免费软件是OBS。2、前期处理,业内有种说法,80%的主播不看不美。因此,美颜已经是视频源预处理的标配功能。此外还有水印、模糊效果等,针对不同的手机系统提供了不同的处理库。3.编码。在编码时,我们需要处理好硬件兼容性问题,在码率和画质之间寻求平衡。这是最大的两个问题。iOS系统的硬件兼容性比较好,可以使用硬编码,而Android系统由于硬件型号问题,多采用软编码。4、推流转码,从主机端到服务器端,再到边缘节点,再从边缘节点到播放端,全程数据传输。为了使采集端的推流适配各个平台的不同协议,一般在服务端进行转码处理,将视频文件转换成不同格式,支持RTMP、HLS、FLV等不同协议。5.分销。随着移动直播的兴起和游戏直播的不断火爆,网络直播平台支持亿高并发在理论上是可以实现的。为了优化终端观看直播的体验,一般采用CDN来加速内容分发,实现高并发能力。6、客户端播放,即解码和渲染。目前iOS端播放的兼容性比较好,安卓硬件解码编码也存在兼容性问题。通常在播放端需要解决秒开、低延迟等问题。3.直播架构这是阿里云全景直播解决方案的示意图,包括推流端的详细推流、直播中心的流存储、转码和截图录制等视频处理、CDN智能调度和分发,最后回放结束回放整个过程。对于推流端的推流,目前主要使用RTMP协议,播放可以使用RTMP、HTTPFLV、HLS协议。常用的推流端有OBS、手机APP、FFmpeg;播放端包括Flash、VLC、HTML5、手机APP等形式;视频直播中心拥有稳定的推流上行,支持mic、IM、直播间管理等多台直播服务器实现推流能力;CDN直播分发提供流畅的播放下行,以及700多个国内节点和300多个海外节点,以及丰富的小运营商节点。播放端,我们优化了弱网下首屏秒开和跳帧播放,保证用户体验。对于直播服务器的一个流程,我们可以认为一个推流端和多个播放端是一种非常典型的发布订阅关系。从下图可以看出,主播完成发布动作后,本次直播内容被本次推流推送到服务器,三个观众为订阅者,从服务器拉流,即使用播放动作完成推流。进程内和节点间的发布订阅关系是级联关系,CDN的直播分发就是建立在这个模型上的。那么我们从CDN分发的角度来看基础设施。内容通过存储集群到达发布集群,再通过骨干中转环境L2,利用CDN智能调度到达距离用户最近的节点L1,平滑推送给用户。4、业务功能及场景对于直播来说,转码业务功能非常重要。转码后,会在原码流名称上加一个后缀。下图是转码前后画质和码率的差异。与转码相关的截图,比如水印、动态模板、延迟转码等,也是重要的业务。比如直播平台的页面分类下有很多图片,刷新后图片会发生变化,都是通过周期性的截图来完成的。另外,阿里云还开放动态配置直播、录制、开停流回调、推流播放鉴权、停播、黑名单、禁播、各种接口API、转推其他厂商,和扳机拉动。streaming,mic,playpureaudio/video等。还有一个很重要的就是直播数据的监控。对于客户和我们来说,非常有必要时刻关注直播情况,掌握直播数据,以防出现问题。视频监控用于记录一个码流的重要信息,如视频常用码率、播放流量、在线人数、视频帧率监控等。视频的特点是每秒的帧率比较固定,视频帧率大约为每秒20~30帧。卡顿的主要原因一般是网络链路抖动。排查问题变得非常方便,对于各种堵车、客户提出的各种问题,都能快速查明原因。正常的监控图应该是一条直线。上图中帧率的尖峰是由于公网连接抖动后统计数据下降所致。对于一个流的多个播放端,服务端会不断向播放端写入帧数据。一旦网络出现波动,遇到无法写入的情况,帧就会被放到连接的等待队列中,超过帧队列。长度限制,服务器会选择丢帧。一般出现这种情况是因为网络抖动比较严重。我们也会以此为依据来判断整个网络链路的质量,用红色和绿色来区分正常和异常的链路质量。以上架构和业务功能可以应用于哪些场景?我们也对阿里云直播视频CDN服务的客户场景进行了分类总结,主要有以下五个方向:1.UGC互动直播:不仅提供从推送到播放的一整套直播解决方案,还集成了成熟的互动解决方案,包括IM、连麦等功能。例如:壹直播、映客等直播互动平台。2、电商直播:提供一整套电商直播解决方案,支持动态扩展的直播技术架构,无需担心直播促销高峰流量涌入。例如:手机淘宝等电商直播平台。3、体育赛事/大型综艺直播:为热门体育赛事、综艺直播提供动态扩展的直播服务。通过CDN和PCDN的分发,用户无需担心流量突然涌入。比如:CCTV5,等电视直播平台。4、游戏直播:提供游戏直播各种采集设备的接入,以及直播的录制功能,让游戏直播平台可以提供点播服务。例如:全民、熊猫、等游戏直播平台。5、在线教育/财经直播:提供直播鉴权、直播防盗链、URL加密等功能,为教育、财经直播提供安全保障。例如:第一财经等财经平台、知途教育等教育直播平台。