Android视频直播核心技术(架构)详解
一、直播架构解析
目前主流的直播架构中主要有两种方案,即流媒体转发、P2P。流媒体转发,是一种在视频直播中以流的方式将连续的音、视频数据经编码压缩后传输到流媒体服务器,用户实时从服务器获取流媒体资源,而不必要等待整个文件下载文件完毕的C/S架构视频直播方案;P2P直播,是一种建立在P2P技术基础上的视频直播方案,它规定客户端之间使用一定协议来交换和共享直播数据,通过减少对服务器的数据请求,以降低服务端的I/O带宽等方面压力,从而削减服务器带宽成本,降低客户端卡播率。
1. 流媒体转发
video安卓下载(1) YUV/RGB颜格式
类似于RGB,YUV也是一种颜格式,通常我们手机摄像头采集的每一帧图像就是YUV格式的,它分别由Y、U、V分量组成,其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V”表示的则是度(Chrominance或Chroma),作用是描述影像彩及饱和度,用于指定像素的颜。 因此,YUV是一种亮度信号Y和度信号U、V是分离的彩空间,它主要用于优化彩视频信号的传输,使其向后相容老式黑白电视,且与RGB要求三个独立的视频信号同时传输相比,它最大的优点在于只需占用极少的频宽,非常适用于流媒体传输。
YUV格式分为两种类型,即Packet(包)和Plannar(平面)。Packet类型是将Y、U、V分量存储在同一个数组中,每个像素点的Y、U、V是连续交错存储的,常见的采样格式有NV21、NV12;Plannar类型是将Y、U、V分量分别存储在三个独立的数组中,且先连续存储所有像素点的Y分量,紧接着存储所有像素点的U分量,最后存储所有像素点的V分量,常见的采样格式有YV12、I420。关于YUV颜格式深度分析,参见我这篇博文: 视频直播YUV颜格式完全解析 
(2) H.264视频编码技术
H.264是MPEG-4的第十部分,是由VCEG和MPEG联合提出的高度压缩数字视频编码器标准,
它的出现就是为了更大程度地对原始YUV图像进行压缩编码,同时能够保证视频传输性能和画面质量。H.264具有低码率、高压缩、高质量的图像、容错能力强、网络适应性强等特点,它最大的优势拥有很高的数据压缩比率,在同等图像质量的条件下,H.264的压缩比是MPEG-2的两倍以上。
H.264编码框架分为两层:VCL、NAL。VCL(Video Coding Layer,视频编码层),负责高效的视频内容表示;NAL(Network Abstraction Layer,网络抽象层),负责以网络所要求的恰当的方式对数据进行打包和传送。在H.264协议里定义了三种帧,完整编码的帧叫I帧(关键帧),参考之前的I帧生成的只包含差异部分编码的帧叫P帧,还有一种参考前后的帧编码的帧叫B帧。H.264编码采用的核心算法是帧内压缩和帧间压缩。其中,帧内压缩是生成I帧的算法,它的原理是当压缩一帧图像时,仅考虑本帧的数据而不用考虑相邻帧之间的冗余信息,由于帧内压缩是编码一个完整的图像,所以可以独立的解码显示;帧间压缩是生成P、B帧的算法,它的原理是通过对比相邻两帧之间的数据进行压缩,进一步提高压缩量,减少压缩比。关于H.264深度分析,参见我这篇博文: 深度解析H.264编码原理
(3) H.265视频编码技术
H.265,又称HEVC(High Efficiency Video Coding,高效视频编码),是继H.264之后所制定的新的视频编码标准,它是对H.264编码标准的改进,包括提高压缩效率、提高鲁棒性和错误恢复能力、减少实时的时延、降低复杂度等,其目的是旨在在有限带宽下传输更高质量的网络视频,仅需原先的一半带宽即可播放相同质量的视频。比如H.263在传输码率为2~4Mbps时只能传输标清视频,H.264可以以低于2Mbps的传输码率传输标清视频,而H.264在低于1.5Mbps的传输码率情况下就能传输1080P全高清视频,并且同等分辨率情况下,码率减少51-74%时H.265编码视频的质量还能与H.264编码视频近似,甚至效果更好。不同编码方式复杂度和所需传输码率对比如下图:
(4) AAC音频编码技术
高级音频编码(AdvancedAudio Coding,AAC)一种基于MPEG-4的音频编码技术,它由杜比实验室、AT&T等公司共同研发,目的是替换MP3编码方式。作为一种高压缩比的音频压缩算法,AAC的数据压缩比约为18:1,压缩后的音质可以同未压缩的CD音质相媲美。因此,相对于MP3、WMA等音频编码标准来说,在相同质量下码率更低,有效地节约了传输带宽,被广泛得应用于互联网流媒体、IPTV等领域(低码率,高音质)。
音频数据在压缩编码之前,要先进行采样与量化,以样值的形式存在。音频压缩编码的输出码流,以音频帧的形式存在。每个音频帧包含若干个音频采样的压缩数据,AAC的一个音频帧包含960或1024个样值,这些压缩编码后的音频帧称为原始数据块(RawData Block),由于原始数据块以帧的形式存在,即简称为原始帧。原始帧是可变的,如果对原始帧进行ADTS
的封装,得到的原始帧为ADTS帧。 ADTS封装格式的码流以帧为单位,一个ADTS帧由帧头、帧净荷组成。其中,帧头定义了音频采样率、音频声道数、帧长度等关键信息,它由两部分组成,共占7个字节:固定头信息adts_fixed_header、可变头信息adts_variable_header。固定头信息中的数据每一帧都相同,而可变头信息则在帧与帧之间可变;帧净荷主要由1~4个原始帧组成,它包含的数据用于解析与解码。关于AAC格式解析,参见我这篇博文: AAC编码格式分析与MP4文件封装
(5) 重要参数
a) 帧率
帧率是指在每秒内传输的图像帧数量,单位为fps,它的大小影响画面流畅度,且画面流畅程度成正比。通常,帧率越大画面越流畅,帧率越小画面越有跳动感(卡顿)。
b) 分辨率
就是屏幕图像的精密度,显示器所能显示的像素的多少。可以把整个图像想象成是一个大型的棋盘,而分辨率的表示方式就是所有经线和纬线交叉点的数目。以分辨率为1024×768的屏幕来说,(即每一条水平线上包含有1024个像素点,共有768条线,总像素1024x768个),即扫描列数为1024列,行数为768行。分辨率影响图像大小,与图像大小成正比:分辨率越高,图像越大;分辨率越低,图像越小。
c) 码率(视频)/比特率(音频)
视频中比特率又被称为码率,是指码率就是数据传输时单位时间传送的数据位数,单位是Kbps即千位每秒(=1000*1bps)。它表示经过编码(压缩)后的音、视频数据每秒钟需要用多少个比特来表示。比特率越高,传输数据就越大,音、视频的质量就越好,但编码后的文件就越大。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。