|
楼主 |
发表于 2019-5-30
|
三、直播流程详述
通过上面的介绍,我们已经了解音视频一些基本的知识。接下来,我们一起再描述一遍直播类应用的整体流程。
1. 音视频采集
在音视频采集阶段会包括:音频采集和图像采集。
在音频采集时,除了上面我们说到的采样率、量化级数和声道数参数外,还需要音频帧。
音频跟视频很不一样,视频每一帧就是一张图像,而从声音的正玄波可以看出:音频数据是流式的,没有明确的一帧帧的概念。在实际的应用中,为了音频算法处理/传输的方便,一般约定俗成取 2.5ms~60ms 为单位的数据量为一帧音频。
这个时间被称之为“采样时间”,其长度没有特别的标准,它是根据编解码器和具体应用的需求来决定的。
如果某音频信号是采样率为 8kHz、双通道、量化级数是16bit,采样时间是20ms,则一帧音频数据的大小为:8000 * 2 * 16bit * 0.02s = 5120 bit = 640 byte
在图像采集中,采集的图片结果会组合成一组连续播放的动画,即构成视频中可肉眼观看的内容。
图像的采集过程主要由摄像头等设备拍摄成 YUV 编码的原始数据,然后经过编码压缩成 H.264 等格式的数据分发出去。在图像采集阶段,涉及的主要技术参数包括:图像传输格式、图像格式、传输通道、分辨率以及采样率。
在音视频的采集阶段,常用的采集源包括摄像头,比如手机的前后置摄像头;游戏直播中使用的屏幕录制;和电视节目中视频文件的直接推流。
2. 音视频处理
音视频处理会分为:视频处理和音频处理。
视频处理包括:美颜、滤镜、面部识别、水印、剪辑拼接等。音频处理包括:混音、降噪、声音特效等。
下面我们简要描述一下美颜和视频水印的基本原理:
美颜的主要原理是通过【磨皮】+【美白】来达到整体美颜效果的。磨皮的技术术语是去噪,也就是对图像中的噪点进行去除或者模糊化处理,常见的去噪算法有均值模糊、高斯模糊和中值滤波等。这个环节中也涉及到人脸和皮肤检测技术。
视频水印包括播放器水印和视频内嵌水印两种方式。对于播放器水印来说,如果没有有效的防盗措施,对于没有播放鉴权的推流,客户端拿到直播流之后可以在任何一个不带水印的播放器里面播放,因此也就失去了视频保护的能力。所以,一般来说会选择视频内嵌水印的方式打水印,这样,水印就会内嵌到视频之内,在视频播放的过程中持续显示。
再多聊一些,视频内嵌水印也会应用在软件中,软件中播出企业内部版权保护的动画段视频时,会应用到内嵌水印的技术。
3. 音视频编码和封装
音视频的编码以及视频的封装在上述基础知识部分已经介绍过了,这里不再赘述。
在这里说一下编码器的知识。上文中我们了解了H.264的编码技术,编码流程是要基于编码器进行的。
编码器的主要流程是:帧内预测(去除空间冗余)/帧间预测(去除时间冗余)——变换(去除空间冗余)——量化(去除视觉冗余)——熵编码(去除编码冗余)。通过该流程,即可完成音视频的编码步骤。
4. 推流
推流就是将处理过的音频和视频数据通过流媒体协议发送到流媒体服务器。
推流协议:
推流所遵循的协议有RTMP、WebRTC和基于UDP的私有协议。
RTMP协议是基于TCP协议的,RTMP 是目前主流的流媒体传输协议,广泛用于直播领域,市面上绝大多数的直播产品都采用了这个协议。但是,由于基于TCP协议,传输成本高,在弱网环境下丢包率高,不支持浏览器推送。
WebRTC是一个支持网页浏览器进行实时语音对话或视频对话的 API,主要应用于视频会议。它的主流浏览器支持度高,并且底层基于SRTP和UDP,弱网情况优化空间大。基于UDP的私有协议。有些直播应用会使用 UDP 做为底层协议开发自己的私有协议,因为 UDP在弱网环境下的优势通过一些定制化的调优可以达到比较好的弱网优化效果,但是开发成过高。CDN:
推出去的流媒体要给各个地理位置的观众看,那么这里就需要CDN网络了。CDN就是为了解决用户访问网络资源慢而产生的技术。
CDN包括边缘节点、二级节点和源站。内容提供方可以将内容放到源站上,用户从边缘节点获取数据,而CDN的二级节点则用于缓存,减轻源站压力。
在直播领域中,CDN要支持的服务如下:
流媒体协议的支持。比如RTMP等;首屏秒开。从用户点击到播放控制在秒级以内;1~3 延迟控制。从推流端到播放端,延迟控制在 1~3 秒之间;全球全网智能路由。可以利用整个CDN网络内的所有节点为某一单一用户服务,不受地域限制。
5. 流媒体服务器处理
流媒体服务器要做的事情包括:数据分发(CDN)、支持上述CDN的一些服务、实时转码以及内容的检测(鉴黄)等。
6. 拉流
拉流就是客户端从流媒体服务器上拉取获得上述步骤中的音视频数据。同理,这个过程也是要基于上述的协议和CDN。
7. 音视频解码
在上述H.264编码的介绍中,说到了SPS/PPS是解码必备的数据。此步骤就是需要对拉流下来已编码的音视频数据进行解码。
解码过程就是编码的逆过程,这个过程包括:熵解码、变换解码、预测解码。
H.264规范规定了解码器的结构,解码的过程大体如下:以宏块为单位,依次进行熵解码、反量化、反变换,得到残差数据。再结合宏块里面的预测信息,找到已解码的被参考块,进而结合已解码被参考块和本块残差数据,得到本块的实际数据。宏块解码后,组合出片,片再进而组合出图像。
这里要说明的是:如果H264码流中I帧错误或丢失,就会导致错误传递,单独的P帧或B帧是完成不了解码工作的。I帧所保留的是一张完整的视频帧,是解码的关键所在。
8. 音视频播放
在完成了音视频数据的解码后,就可以通过硬件设备(手机或PC)上的播放器对音视频文件进行渲染播放了。
那么,上述架构图中的信令服务器是干什么的呢?
——信令服务器是用来处理主播端和用户端的一些信令指令的。
在网络中传输着各种信号,其中一部分是我们需要的(例如:打电话的语音,上网的数据包等等),而另外一部分是我们不需要的(只能说不是直接需要)它用来专门控制电路的,这一类型的信号我们就称之为信令(摘自百度百科)。也就是说,信令是指通信系统中的控制指令。 |
|