音视频基础概念

直播对实时性要求高、对编码性能要求低

为什么要编解码,比如如果需要变声,就需要解码成原始PCM数据,对原始数据修改,然后重新编码。视频画面做滤镜也一样

声音的物理性质
声音是波
声音是由物体振动而产生的一种压力波,一直延续到振动消失

声波三要素:频率、振幅和波形。频率代表音阶的高低,振幅代表响度,波形代表音色。
频率越高,波长越短。低频声响的波长较长,容易绕过障碍物,能量衰减就少,生意就会传得远
振幅代表响度,响度其实是能量大小的反映。生活中常用分贝来描述响度的大小
音色,在相同的频率和振幅下,钢琴和小提琴的声音听起来完全不相同,因为它们的音色不同,因为它们的介质所产生的波形不同。

人类耳朵的听力范围20Hz~20kHz

等响曲线,描述人耳感觉到相同的声压值,在不同频率下需要不同的振幅。从等响曲线看出,人类对4kHz频率比较敏感

声音的传播介质
声音可以通过空气、液体、固体进行传播。
吸音主要是解决声音反射而产生的嘈杂声,衰减入射音源的反射能量,达到声音的保真效果,录音棚的吸音材料
隔音主要解决声音的透射而降低主体空间内的吵闹感。

回声,两种声音传到我们的耳朵时差小于80ms,我们就无法区分开两种声音来

共鸣,敲击一个物体时另一个物体也会发出声音,证明声音传播过程是一种能量传播的过程。

数字音频
采样:根据奈奎斯特定理,按比声音最高频率高2倍以上的频率对声音进行采样。人类耳朵的听力范围20Hz~20kHz,所以采样频率一般为44100Hz,这样可以保证声音达到20khz,也能被数字化。从而保证经过数字化之后,人耳听到的声音质量不会被降低。同理电影的每秒24帧图片。
量化:具体每个采样的表示方式,例如:16比特[-32768,32767],最终模拟的音频信号在幅度上分为65535层
编码:按照一定的格式记录采样和量化后的数字数据,比如顺序存储或者压缩存储。
这里通常所说的音频裸数据格式是脉冲编码调制(PCM),描述一段PCM数据一般有几个概念:量化格式、采样率、声道数。
对于声音格式还有数据比特率,即一秒时间内的比特数目,用于衡量音频数据单位时间内的容量大小。例如CD,44.1kHz采样率,16比特量化格式,双声道,44100 * 16 * 2 = 1378.125kbps,那么一分钟占据的存储空间 1378.125kbps*60/8/1024=10.09M

麦克风怎么采集数据?
麦克风有一层碳膜,非常薄且敏感。空气振动会压缩这层薄膜,薄膜下有一个电极,碳膜的振动会接触电极,接触时间的长短和频率与声波的振动幅度和频率有关,这样玩长城声音信号到电信号的转换。之后经过放大电路处理,就可以实施后面的采样量化处理。

音频压缩,分为有损压缩和无损压缩。压缩比越小,丢失信息越多,失真度越高。压缩编码原理实际上是压缩掉冗余信息,包括人耳听觉范围之外的音频信号以及被掩盖掉的音频信号。

(1)WAV编码:PCM脉冲编码调制工作流程的一种实现,在PCM数据前面加上44字节的采样率、声道数、数据格式等信息。音质好,大量软件支持。多媒体开发的中间文件、保存音乐和音效素材
(2)MP3编码:具有不错的压缩比,使用LAME编码的中高码率MP3文件,听觉上接近于WAV文件。音质在128kbit/s以上表现不错,压缩比高
(3)AAC编码:LC-AAC、HE-AAC、HE-AAC v2三种主要编码格式。传统LC-AAC音频编码适用于高码率(>80kbit/s)以上变现不错;HE-AAC(AAV+SBR)中低码率;HE-AAC v2(AAC+SBR+PS)主要应用于低码率(<48Kbit/s)场景。在128Kbit/s以下码率表现优异,适用于视频中音频轨的编码

图像的物理现象
图像的表示方式
1、RGB表示
浮点表示0.0~1.0,OPENGL ES中对每个子像素点的表示
整数表示RGBA_8888\RGB_565等
如果RGBA_8888,大小1280720像素图片大小:1280720*4/1024 = 3.516MB
上面就是位图(bitmap)在内存中所占用的大小,所以一张图片的裸数据是很大的,那么就需要编码
JPEG编码适用于静态图像编码,有较好的压缩性能,也有较好的重建性能。
视频编码还要考虑时域上的因素,不仅仅考虑帧内编码,还要考虑帧间编码。
RGB要求三个独立的视频信号同时传输
2、YUV表示
Y表示明亮度也称灰度阶;
UV表示色度,描述色彩饱和度。
“亮度”是透过RGB输入信号来建立的,方法是将 RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面—— 色调与饱和度,分别用Cr和Cb来表示。其中,V(Cr)反映了RGB输入信号 红色部分与RGB信号亮度值之间的差异,而U(Cb)反映的则是RGB输入信 号蓝色部分与RGB信号亮度值之间的差异。
之所以采用YUV色彩空间,是因为它的亮度信号Y和色度信号U、 V是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图 像就是黑白灰度图像。彩色电视采用YUV空间正是为了用亮度信号Y解 决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电 视信号,最常用的表示形式是Y、U、V都使用8个字节来表示,所以取 值范围就是0~255。在广播电视系统中不传输很低和很高的数值,实际 上是为了防止信号变动造成过载,因而把这“两边”的数值作为“保护 带”,不论是Rec.601还是BT.709的广播电视标准中,Y的取值范围都是 16~235,UV的取值范围都是16~240

YUV420P,1280×720视频帧大小1280 * 720 * 1 + 1280 * 720 * 0.5 = 1.318MB
如果fps(1秒的视频帧数目)是24,按照一般电影的长度90分钟来 计算,那么这部电影用YUV420P的数据格式来表示的话,其数据量的 大小就是:1.318MB * 24fps * 90min * 60s = 166.8GB

YUV分类采样
YUV 4:4:4采样,每一个Y对应一组UV分量。
YUV 4:2:2采样,每两个Y共用一组UV分量。
YUV 4:2:0采样,每四个Y共用一组UV分量。

YUV与RGB的转换
有标清电视使用标准BT.601和BT.709
那么什么时候该用哪一种转换呢?比较典型的场景是在iOS平台中 使用摄像头采集出YUV数据之后,上传显卡成为一个纹理ID,这个时 候就需要做YUV到RGB的转换(具体的细节会在后面的章节中详细讲 解)。在iOS的摄像头采集出一帧数据之后(CMSampleBufferRef),我 们可以在其中调用CVBufferGetAttachment来获取YCbCrMatrix,用于决 定使用哪一个矩阵进行转换,对于Android的摄像头,由于其是直接纹 理ID的回调,所以不涉及这个问题。其他场景下需要大家自行寻找对应 的文档,以找出适合的转换矩阵进行转换。

视频编码
视频压缩也是通过去除冗余信息来进行压缩的。相较于音频数据,视频数据有极强的相关 性,也就是说有大量的冗余信息,包括空间上的冗余信息和时间上的冗 余信息。

使用帧间编码技术可以去除时间上的冗余信息,具体包括以下几个 部分。
·运动补偿:运动补偿是通过先前的局部图像来预测、补偿当前的 局部图像,它是减少帧序列冗余信息的有效方法。
·运动表示:不同区域的图像需要使用不同的运动矢量来描述运动 信息。
·运动估计:运动估计是从视频序列中抽取运动信息的一整套技
术。
使用帧内编码技术可以去除空间上的冗余信息。
还记得前面提到过的图像编码标准JPEG吗?对于视频,ISO同样也 制定了标准:Motion JPEG即MPEG,MPEG算法是适用于动态视频的压 缩算法,它除了对单幅图像进行编码外,还利用图像序列中的相关原则 去除冗余,这样可以大大提高视频的压缩比。截至目前,MPEG的版本 一直在不断更新中,主要包括这样几个版本:Mpeg1(用于VCD)、 Mpeg2(用于DVD)、Mpeg4 AVC(现在流媒体使用最多的就是它 了)。
相比较于ISO制定的MPEG的视频压缩标准,ITU-T制定的H.261、 H.262、H.263、H.264一系列视频编码标准是一套单独的体系。其中, H.264集中了以往标准的所有优点,并吸取了以往标准的经验,采用的
是简洁设计,这使得它比Mpeg4更容易推广。现在使用最多的就是 H.264标准,H.264创造了多参考帧、多块类型、整数变换、帧内预测等 新的压缩技术,使用了更精细的分像素运动矢量(1/4、1/8)和新一代 的环路滤波器,这使得压缩性能得到大大提高,系统也变得更加完善。

·I帧:帧内编码帧(intra picture),I帧通常是每个GOP(MPEG所 使用的一种视频压缩技术)的第一个帧,经过适度地压缩,作为随机访 问的参考点,可以当成静态图像。I帧可以看作一个图像经过压缩后的 产物,I帧压缩可以得到6:1的压缩比而不会产生任何可觉察的模糊现 象。I帧压缩可去掉视频的空间冗余信息,下面即将介绍的P帧和B帧是 为了去掉时间冗余信息。
·P帧:前向预测编码帧(predictive-frame),通过将图像序列中前 面已编码帧的时间冗余信息充分去除来压缩传输数据量的编码图像,也 称为预测帧。
·B帧:双向预测内插编码帧(bi-directional interpolated prediction frame),既考虑源图像序列前面的已编码帧,又顾及源图像序列后面 的已编码帧之间的时间冗余信息,来压缩传输数据量的编码图像,也称 为双向预测帧。
基于上面的定义,我们可以从解码的角度来理解IPB帧。 ·I帧自身可以通过视频解压算法解压成一张单独的完整视频画面, 所以I帧去掉的是视频帧在空间维度上的冗余信息。 ·P帧需要参考其前面的一个I帧或者P帧来解码成一张完整的视频画 面。
·B帧则需要参考其前一个I帧或者P帧及其后面的一个P帧来生成一 张完整的视频画面,所以P帧与B帧去掉的是视频帧在时间维度上的冗 余信息

在H264的概念中有一个帧称为IDR帧,那么IDR帧与I帧的区别是什 么呢?首先来看一下IDR的英文全称instantaneous decoding refresh picture,因为H264采用了多帧预测,所以I帧之后的P帧有可能会参考I 帧之前的帧,这就使得在随机访问的时候不能以找到I帧作为参考条 件,因为即使找到I帧,I帧之后的帧还是有可能解析不出来,而IDR帧 就是一种特殊的I帧,即这一帧之后的所有参考帧只会参考到这个IDR 帧,而不会再参考前面的帧。在解码器中,一旦收到一个IDR帧,就会 立即清理参考帧缓冲区,并将IDR帧作为被参考的帧

PTS和DTS
DTS:是AVPacket里的一个成员,表示该压缩包应该在什么时候被解码
PTS:AVFrame就是视频的一帧图像,这帧图像什么时候显示给用户,取决于它的PTS。解码阶段的同步和输出

人类视觉系统HVS
对高频信息不敏感
对高对比度更敏感
对亮度信息比色度信息比较敏感
对运动信息比较敏感

针对人类视觉系统HVS特点
丢弃高频信息,只编码低频信息;
提高边缘信息的主观质量
降低色度的解析度
对感兴趣区域进行特殊处理

音视频基础概念_第1张图片

摄像头–原始NV21数据–x264工具将YUV数据按照h264协议压缩编码–h264是连续的流–rtmpDump工具将音频流和视频流按照rtmp协议进行封装(packet)

音视频基础概念_第2张图片
音视频基础概念_第3张图片

音视频基础概念_第4张图片
音视频基础概念_第5张图片
音视频基础概念_第6张图片
音视频基础概念_第7张图片
音视频基础概念_第8张图片
音视频基础概念_第9张图片
音视频基础概念_第10张图片
音视频基础概念_第11张图片
音视频基础概念_第12张图片
音视频基础概念_第13张图片
音视频基础概念_第14张图片
音视频基础概念_第15张图片
音视频基础概念_第16张图片

h264 序列、帧、slice关系

从大到小依次为:序列、帧(I、P、B帧)、片组、片(I、P、B、SP、SI片)、NALU、宏块、亚宏块、块、像素

序列

图像以序列为单位进行组织,GOP,序列就是一段连续图像帧且画面之间变化不大。

统计一段时间内图像的结果表明,相邻几幅图像,一般像素存在差别的点只有10%以内,亮度差值变化不超过2%,

色度差值变化只有1%以内。所以一段连续的图像画面之间变化不大,可以把第1帧编码为完整图像帧,第2帧只编

码其与前面一帧的差别,这样第2帧只是前一帧的1/10或更小,依次对第2帧之后的图像帧做同样处理,这样的一段

图像就是一个序列。当某个帧与前面的帧图像变化很大,无法参考前面帧生成时,就要开始一个新序列。

帧 :有1个或多个片组,如果不采用FMO(灵活宏块排序)机制,则一帧只有一个片组

片组 :包含1个片(slice)或多个片

片 :slice,由宏块组成,如果不采用DP(数据分割)机制,1个片只包含1个NALU,

           否则1个片由3个NALU组成,nal_unit_type值等于2、3、4的NALU属于同一个片

           分片的目的是限制误码的扩撒和传输,使片间保持独立,[ [slice header] [slice data] ]

           [slice header] 说明了片类型、属于哪个帧、参考帧等

           [slice data] 里是整数个宏块

宏块 :编码处理的基本单元,由多个块组成,通常宏块大小为16X16像素,分为I、B、P宏块

块 :一个编码图像要划分成多个块才能进行处理,一个块是4X4像素

图像解码过程是按照slice进行解码,然后按照片组将解码宏块重组成图像

音视频基础概念_第17张图片
音视频基础概念_第18张图片

音视频基础概念_第19张图片
音视频基础概念_第20张图片
音视频基础概念_第21张图片
音视频基础概念_第22张图片
音视频基础概念_第23张图片

你可能感兴趣的:(音视频)