音视频基础知识讲解

在生活中我们会碰到各种格式的视频文件,如mp4、flv、rmvb、mkv、avi等格式,大家有想过这些格式的本质是什么吗?这些音视频数据是如何存储的?播放器又是如何去云端解析并播放这些文件?想要弄明白这些问题,我们很有必要去学习下音视频的一些基础知识。

1.视频播放器的原理

首先说一下上文提到的这些格式都是一种封装格式,它相当于一个容器,里面装了音频流、视频流、字幕流等信息,其中视频流、音频流都是压缩后的数据,如视频流通过h264编码压缩后的数据、音频通过aac编码压缩后的数据。而视频播放器如果想要播放一个文件需要经过解协议,解封装,解码视音频,视音频同步。如果播放本地文件则不需要解协议,为以下几个步骤:解封装,解码视音频,视音频同步。他们的过程如图所示:

在这里插入图片描述

解协议:就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。

解封装:就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。

解码:就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。音频的压缩编码标准包含AAC,MP3,AC-3等等,视频的压缩编码标准则包含H.264,MPEG2,VC-1等等。解码是整个系统中最重要也是最复杂的一个环节。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。

视音频同步:就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。

1.1 流媒体协议

流媒体协议是服务器与客户端之间通信遵循的规定,如监控常用的rtsp+rtp协议,直播使用的rtmp,点播使用的http协议。其底层实现的原理裁员的是tcp或者udp协议。如下图常用的一些流媒体协议:

在这里插入图片描述

1.2 封装格式

封装格式的主要作用是把视频码流和音频码流按照一定的格式存储在一个文件中。现如今流行的封装格式如下表所示:

在这里插入图片描述

由表可见,除了AVI之外,其他封装格式都支持流媒体,即可以“边下边播”。有些格式更“万能”一些,支持的视音频编码标准多一些,比如MKV。而有些格式则支持的相对比较少,比如说RMVB。

1.3音视频解码

音视频编码包括音频解码和视频解码,音频解码指的是把封装格式中的音频流数据通过解码器如AAC、MP3解码成原始的PCM裸数据,视频解码指的是把封装格式中的视频流数据通过解码器如x264、x265、VP8解码成原始的YUV数据或者RGB数据。解码后的原始数据是非常庞大的,这就是为啥要把原始数据通过编解码器压缩编码的原因。这也是音视频中的最重要的一部分。下图为主要的音频和视频编解码器:
在这里插入图片描述
在这里插入图片描述
目前使用最广泛的音频编码器要数AAC了,这些编解码的音质比较大致为 AAC+ > AAC> WMA > MP3,AAC有三个版本,AAC LC、AAC HE AAC HEv2。AAC LC是最基本的AAC。

HE:“High Efficiency”(高效性)。HE-AAC v1(又称AACPlusV1,SBR),用容器的方法实现了AAC(LC)和SBR技术。SBR其实代表的是Spectral Band Replication(频段复制)。简要叙述一下,音乐的主要频谱集中在低频段,高频段幅度很小,但很重要,决定了音质。如果对整个频段编码,若是为了 保护高频就会造成低频段编码过细以致文件巨大;若是保存了低频的主要成分而失去高频成分就会丧失音质。SBR把频谱切割开来,低频单独编码保存主要成分, 高频单独放大编码保存音质,“统筹兼顾”了,在减少文件大小的情况下还保存了音质,完美的化解这一矛盾。

HEv2:用容器的方法包含了HE-AAC v1和PS技术。PS指“parametric stereo”(参数立体声)。原来的立体声文件文件大小是一个声道的两倍。但是两个声道的声音存在某种相似性,根据香农信息熵编码定理,相关性应该被去 掉才能减小文件大小。所以PS技术存储了一个声道的全部信息,然后,花很少的字节用参数描述另一个声道和它不同的地方。

目前应用最广发的要数H264、H265,H265的压缩率比H264的压缩率提高了一倍,但对GPU、CPU的要求会比较高,但随着手机性能越来越好,H265编解码标准会应用的越来越广泛。他们对应的应用非常普遍的编解码器x264、x265都是开源免费的。

1.4 音视频原始数据

首先先来介绍下音频的原始数据PCM数据,PCM(Pulse Code Modulation,脉冲编码调制)音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样、量化、编码转换成的标准数字音频数据。描述音频数据的参数主要有采样率、采样位数、声道数

采样率:在单位时间内采样的次数,如8kHz、44.1kHz、48kHz 即每秒采样8000次、44100次、48000次。

采样位数:描述用几个比特来存储一个采样数据。如用8位、 16位、更高精度的16位,采样位数越高,描述的音频数据越准确。当多个字节表示一个音频数据时涉及到大小端的问题。

声道数:音频数据的通道数,通常有单声道、双声道、三声道。

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

以unsigned int value = 0x12345678为例,如图在内存中的存储方式:

在这里插入图片描述

PCM数据存储格式,如果是单声道的音频文件,采样数据按时间的先后顺序依次存入(有的时候也会采用LRLRLR方式存储,只是另一个声道的数据为0),如果是双声道的话就按照LRLRLR的方式存储,存储的时候与字节序有关。
接下来来介绍下视频的原始数据YUV或者RGB数据,通常来说一般都解码成YUV数据。所以先来介绍下YUV数据。YUV格式分为两大类:

1.planar(平面)和packed(打包)。planar格式,先连续存储所有像素点的Y分量,紧接着存储所有像素点的U,随后存储所有像素点的V。packed格式,每个像素点的Y、U、V分量是连续存储的。

2.YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0。YUV 4:4:4采样,每一个Y对应一组UV分量;YUV 4:2:2采样,每两个Y共用一组UV分量;YUV 4:2:0采样,每四个Y共用一组UV分量。目前应用最多的就是yuv420了。

YUV420又主要有一下几种格式:

yuv420sp:sp(semi-Planar二维平面)指的是YUV不是3个平面而是分成2个平面。Y数据一个平面,UV数据合用一个平面。UV平面的数据格式是UVUVUV…

YUV420P:420P是先把U存放完后,再存放V,也就是说UV他们是连续的。(标准的plannar模式)

I420:又叫YU12,Packed格式,安卓的模式。存储顺序是先存Y,再存U,最后存V。YYYYUUUVVV

YV12:Packed格式,存储顺序是先存Y,再存V,最后存U。YYYVVVUUU

假设YUV420视频的长为L,宽为W,则一帧YUV数据长度为LW3/2字节

RGB实际上就是三基色的组合,不同的格式本质便是对于每一种单色的不同存储和表示方法。主要有以下几种类型:

RGB565:用16个bit表示一个像素,5个bit表示R(红色),6个bit表示G(绿色),5个bit表示B(蓝色)

RGB555:用16个bit表示一个像素,其中最高位不用,R(红色), G(绿色), B(蓝色)都用5个bit来表示

RGB24:用24个bit表示一个像素,R(红色), G(绿色), B(蓝色)都用8个bit来表示,从高位到低位排列如下

用32个bit表示一个像素,R(红色), G(绿色), B(蓝色)都用8个bit来表示,然后用8个bit来表示alpha(透明度)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值