|
直播原理和流程【直播技术原理分析】 在介绍直播技术之前,首先大家需要理解流媒体的概念。所谓流媒体是指采用流式传输的方式在 Internet 播放的媒体格式。流式传输方式是将视频和音频等多媒体文件经过特殊的压缩方式分成一个个压缩包,由服务器向客户端连续、实时传送。客户端通过解压软件对这些数据进行解压后,多媒体就会像发送前那样显示出来。 理解了流媒体,就不难直播原理了,因为直播也是一种流媒体。只不过相比视频、音乐网站这种传统的流媒体,直播流媒体的数据源是由客户端(主播)产生然后实时推送到服务器的,下面的图片显示了直播的大致流程: 首先直播端使用视频、音频采集软件,从我们的直播设备中采集音频、视频等数据,然后对这些数据进行编码并推送到服务器。流媒体服务器使用 CDN 网络分发数据,客户端使用各种设备里的播放器拉流、解码、播放。 直播端的数据采集、编码、推流,有很多推流软件都可以实现,国产的以微赞公司的芯象导播最为有名(芯象导播相关介绍链接:https://csj.0576yun.cn/doc_24603049.html) 关于推流和拉流环节,大家需要知道几个常见的流媒体协议: RTMP:Real Time Messaging Protocol,是 Adobe 设计开发,为了在 Flash 播放器和服务器之间传输音频、视频和数据。客户端必须支持 Flash 才能播放。 HLS: 是苹果公司实现的基于 HTTP 的流媒体传输协议。 HTTP FLV: 将 RTMP 封装在 HTTP 协议之上的,可以更好地穿透防火墙。 直播流推送到服务器后会进行转码、分发。转码就是将直播流转化成不同的协议格式,以便支持不同的客户端设备。而分发到 CDN 网络则是为了解决直播服务器的拥堵、响应慢等问题。 CDN(Content Delivery Network)即内容分发网络,是一个策略性部署的整体系统,主要用来解决由于网络带宽小、用户访问量大、网点分布不均匀等导致用户访问网站速度慢的问题。光说概念可能不好理解,那么举个例子好了。我们知道,京东商城在全国主要城市都建有自己的仓库,这是它送货速度快的主要原因。想象一下,如果京东商城只有北京一个仓库会怎么样?首先全国的订单都会涌入这个仓库,势必造成有些订单处理不及时,响应缓慢。同时,对于距离北京远的地区送货速度也会变慢,更难以想象的是遇到双 11,6.18 这样热点日子。全国各地的仓库对于京东来说就是一个 CDN 网络。 云直播服务 现在很多云服务公司和直播平台,云服务公司像阿里云、腾讯云、七牛等都提供了直播云服务。也就是说这些公司已经在云端处理好了转码,内容分发等技术难点,我们只需要使用平台提供的接口就可以了。而直播平台则是将这些云服务公司的接口利用起来了,更加方便我们的使用,只是要相应多支付相关费用。 推流、拉流 推流我们可以使用功能强大的芯象导播软件(芯象导播相关介绍链接:https://csj.0576yun.cn/doc_24603049.html) 所谓「拉流」,就是从直播服务器的 CDN 中获取直播流数据,这些数据就是直播的画面和声音,所以我们才能观看直播。 【视频直播的流程】 采集 —>处理—>编码和封装—>传输(推流到服务器、服务器流分发)—>播放器流播放 简单描述起来就是:主播端把音视频数据采集编码后通过CDN网络传送到观众端,观众进行观看。之前我常拿网络购物举例子,视频直播就相当于是把图像数据打包,从一个地方运输到另一个地方。 下面我们就从各个环节简单说一下技术原理: 音视频采集采集是整个视频直播过程的第一个环节,它从系统的采集设备中获取原始视频数据,将其输出到下一个环节。视频的采集涉及两方面数据的采集:音频采集和图像采集。 音频采集 音频的采集过程主要通过设备将环境中的模拟信号采集成 PCM 编码的原始数据,然后编码压缩成MP3,AAC,HE-AAC,Opus,FLAC,Vorbis (Ogg),Speex 和 AMR等等格式的数据分发出去。音频采集和编码主要面临的挑战在于:延时敏感、卡顿敏感、噪声消除(Denoise)、回声消除(AEC)、静音检测(VAD)和各种混音算法等。 图像采集 图像的采集过程主要由摄像头等设备拍摄成 YUV 编码的原始数据,然后经过编码压缩成 MP4、3GP、AVI、MKV、WMV、MPG、VOB、FLV、SWF、MOV、RMVB 和 WebM 等等格式的数据分发出去。图像采集和编码面临的主要挑战在于:设备兼容性差、延时敏感、卡顿敏感以及各种对图像的处理操作如美颜和水印等。 处理音视频数据完成采集之后,为了达到相应的现场效果,使视频画面更加的优美往往需要加上一些额外的效果。 例如,现在常见的泛娱乐直播祛斑美颜功能就是必不可少的一项功能,有的还需要加上声音的一些混淆处理让音效更加的丰富,满足直播现场需要的效果。还有的要加logo水印等等,这些都是在编码压缩前进行处理完成的。 编码封装 对流媒体传输来说,编码非常重要,编码性能、编码速度和编码压缩比会直接影响整个流媒体传输的用户体验和传输成本。 为什么要编码? 原始视频数据存储空间大,而经过 H.264 编码压缩之后,视频文件的大小变得非常小,占用带宽传输也很小,满足了实时传输的需求。如果不仅进行编码原始数据文件过于庞大,难以传输,更别提无卡顿、低延迟的直播了。所以从视频采集传感器采集来的原始视频势必要经过视频编码。 为什么编码之后原有的视频数据会变得这么小呢?其实,这里的核心技术原理就是去冗余。 视频图像数据有极强的相关性,也就是说有大量的冗余信息。其中冗余信息可分为空域冗余信息和时域冗余信息,编码技术就是将数据中的冗余信息去掉(去除数据之间的相关性)。 (注:H.264是视频编码器的一种,常见的有H.264、HEVC/H.265 、VP8 、VP9 、FFmpeg 等) 封装就是用什么样容器来装编码之后的数据,就像物流运输一样是选用长方形盒子还是正方形或者是圆形的一样。目前,流媒体传输中主要采用的就是 FLV 和 MPEG2-TS 格式。 视频直播技术编码封装之后在主播端的任务基本就完成了,下一步就进入到CDN网络的分发以及观众端的拉流解码播放。 |