Android音视频开发 <一> 音视频基础知识

一 、音视频相关的术语介绍

1.1 帧率 fps (Frame Per Second)

是以帧称为单位的位图图像连续出现在显示器上的频率(速率)
视频每秒传输的帧数(画面数),每秒帧数越多,显示的画面就越流畅,但对显卡(GPU)的要求也越高。一般来说,30fps就是可以接受的,如果将性能提升到60fps则可以明显提升交互感和逼真感,但是超过75fps就不容易被察觉有明显的流畅度提升了。如果帧率超过屏幕刷新率,则只会浪费图像处理能力,因为监视器不能以这么快的速度更新,这样超过刷新率的帧率就浪费掉了。

1.2 分辨率:

  • 视频分辨率是指视频成像产品所形成的图像大小或尺寸。
  • 手机分辨率
    QVGA QVGA就是Quarter VGA的简称,意思是VGA分辨率的四分之一,这是智能机流行前最为常见的手机屏幕分辨率,竖向的就是240×320像素,横向的就是320×240像素。
    HVGA HVGA代表的意思是Half-size VGA,意思是VGA分辨率的一半,为480×320像素,宽高比为3:2。 这种分辨率的屏幕大多用于PDA
    WVGA WVGA的全称想必大家很容易就能想到了,那就是 Wide VGA,分辨率分为854×480像素和800×480像素两种。
  • 电视分辨率
    720P=1280720=【1680】【980】=169
    2K电视,即1080P=19201080=【16120】【9120】=16
    9
    4K电视,即2160P=38402160=【16240】【9240】=169
    8K电视,即4320P=76804320=【16480】【9480】=16
    9

1.3 刷新率

刷新率是指屏幕每秒画面被刷新的次数,刷新率分为垂直刷新率和水平刷新率,一般提到的刷新率通常指垂直刷新率。垂直刷新率表示屏幕上图片每秒重绘多少次,也就是每秒屏幕刷新的次数,以Hz(赫兹)为单位。刷新率越高,图像就越稳定,图像显示就越自然清晰,对眼睛的影响也越小。刷新率越低,图像闪烁和抖动得就越厉害,眼睛疲劳的就越快。一般来说,如果能达到80Hz以上的刷新率,就可以完全消除图像闪烁和抖动感,眼睛也不太容易疲劳。

1.4 编码格式

编码的目的是压缩数据量,采用编码算法压缩冗余数据。常用的编码格式有如下这两种:

  • MPEG(MPEG-2、MPEG-4)
  • H.26X(H.263、H.264/AVC、H.265/HEVC)

1.5 码率(比特率) bps (Bit Per Second)

视频码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。通俗一点的理解就是取样率,单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件。
码率越高,每秒传送数据就越多,画质就越清晰,视频文件占用空间也越大

文件大小(b) = 码率(b/s)*时长(s)

1.6 DTS和PTS

  • DTS全称Decode Time Stamp,主要用于标示读入内存中的比特流在什么时候开始送入编码器中进行解码。
  • PTS全程Presentation Time Stamp,主要用于度量解码后的视频帧什么时候被显示出来。

1.7 YUV和RGB

  • YUV是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制式采用的颜色空间模型。其中Y、U、V几个字母不是英文单词的首字母,Y代表亮度,UV代表色差,U和V是构成颜色的两个分量。
  • RGB是一种颜色空间模型,通过对红®绿(G)蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色,RGB即代表红,绿,蓝三个通道的颜色。

1.8 视频帧

常见的视频帧有I、P、B帧等:

  • I帧表示关键帧,我们可以理解为这一帧画面的完整保留,解码时只需要本帧数据就可以完成,因为其包含完整画面。
  • P帧表示的是这一帧和之前的一个关键帧(P帧)的差别,解码的时候需要用之前缓存的画面叠加上本帧定义的差别生成最终画面。P帧其实也可以称为差别帧,P帧没有完成的画面数据,只有与前一帧画面的差别数据。
  • B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别,换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面数据与本帧数据的叠加取得最终的画面。b帧压缩率高,但是解码的时候CPU会比较吃力。

1.9 音频帧

音频帧的概念没有视频帧那么清晰,几乎所有视频编码格式都可以简单的认为1帧就是编码后的一副画面。但是音频帧跟编码格式相关,它是各个编码标准自己实现的。

  • 对PCM(未经编码的音频数据)来说,它根本就不需要帧的概念,根据采样率和采样精度就可以播放。比如采样率为44.1kHz,采样精度为16位的音频,可以算出比特率是4410016kb/s,每秒的音频数据是固定的4410016/8字节。
  • AMR帧比较简单,它规定每20ms的音频是1帧,每1帧音频都是独立的,有可能采用不同的编码算法以及不同的编码参数
  • MP3帧较复杂一些,包含了更多的信息,比如采样率、比特率等各种参数。具体如下:音频数据帧个数由文件大小和帧长决定,每一帧的长度可能不固定,也可能固定,由比特率决定,每一帧又分为帧头和数据实体两部分,帧头记录了MP3的比特率、采样率、版本等信息,每一帧之间相互独立。

1.9 量化精度

量化精度表示可以将模拟信号分为多少个等级,量化精度越高,音乐的声压振幅越接近原音乐。量化精度的单位是bit(比特),CD标准的量化精度是16bit,DVD标准的量化精度是24bit。也可以理解为一个采样点用多少bit表示(8/16/24/23bit)。

1.10 采样率

采样率指每秒音频采样点个数(8000/44100Hz),采样率单位用Hz(赫兹)表示。

1.11 声道

声道(Sound Channel)是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,所以声道数也就是声音录制时的音源数量或回放时相应的扬声器数量。
常见声道有单声道、立体声道、4声道、5.1声道、7.1声道等-

二、图像编码原理

1.1 视频文件是什么

视频文件格式是指视频保存的一种格式,各种不同后缀的视频文件,其实就是使用各种不同的数据格式来封装视频的容器。
![视频文件是什么](https://img-blog.csdnimg.cn/571048fea7874061bb26b1320c7124f2.png)

1.2 为什么要进行图像编码

视频是连续的图像序列,由连续的帧构成,一帧即为一幅图像,由于人眼的视觉暂留效应,当帧序列以一定的速度播放时,我们看到的就是动作连续的视频。
这么多连续的图像格式如果不经过编码,数据量就会非常大。比如一个A.rgb文件可能有100Mb,转化为A.h264则可能只有500kb大小。 编码的目的,其实是为了压缩,各种视频编码方式,都是为了让视频体积变大更小,有利于存储和传输。编码的核心思想就是去除冗余信息。

  • 空间冗余:图像内部相邻像素之间存在较强的相关性造成的冗余
  • 时间冗余:视频图像序列中的不同帧之间的相关性所造成的冗余
  • 视觉冗余:是指人眼不能感知活不敏感的那部分图像信息
  • 信息熵冗余:人们用于表达某一信息所需要的比特数总比理论上表示该信息所需的最少比特数要大,他们之间的差距就是信息熵冗余,也称编码冗余,
  • 知识冗余:是指在有些图像中还包含与某些验证知识有关的信息

1.3 如何进行编码(IPB帧)

  • I帧:帧内编码帧,也叫关键帧,I帧可以看做是一个图像经过压缩之后的产物,可以单独解码出一个完整的图像。
  • P帧:前向预测编码帧,记录了本帧和之前的一个关键帧(或P帧)的差别,解码时需要用到之前缓存的画面叠加上本帧定义的差别,生成最终画面。
  • B帧:双向预测编码帧,记录了本帧和前后帧的差别,解码时既需要参考前面一个I帧(P帧),同时也需要后面的P帧才能生成一张完整的图像
    IPB编码

三、视频编码

2.1 常见的视频编码类型

所谓视频编码就是指通过特定的压缩技术,将某个视频格式文件转化为另外一种视频格式文件的方式,视频传输中最重要的编码标准有国际电联(ITU-T国际电子联盟)的H261、H263、H264等。 运动静止图像专家组(有ISO国际标准化组织与IEC国际电子委员会与1988年联合成立)的MPEG系列标准MPEG1、MPEG2、MPEG4 AVC等。

其中ITU-T H.264/MPEG-4 AVC是ITU-T与ISO/IEC联手合作指定的新标准,ITU-T方面称之为H.264。但ISO/IEC的则将这个新标准归纳为MPEG系列,称为MPEG-4 AVC。

而H.265则被视为是ITU-T H.264/MPEG-4 AVC标准的继任者,又称为高效率视频编码(High EFFiciency Video Coding,简称HEVC)

视频编码发展历史

2.2 H264码流分析

H264码流文件分两层。

  • 1、VCL(Video Coding Layer,视频编码层):负责高效的视频内容表示,VCL数据既编码处理的输出,它表示被压缩编码后的视频数据序列
  • 2、NAL(Network Abstraction Layer,网络提取层):负责以网络所要求的恰当的方式对数据进行打包和传输,是传输层。 不管在本地播放还是网络播放,都要通过这层来传输。
    码流的传输过程

2.3 片和宏块

一帧图片经过H.264编码之后,就被编码为一个或多个片(slice),每片包含整个宏块(至少一个宏块,最多包含整个图片宏块),NAL单元就是装载着这些片(slice)的载体。
片和宏块

2.4 Annexb格式

一般H.264编码器的默认输出为:起始码+NALU(NAL单元)。起始码为:0x00000001或者0x000001。 每个NALU包含1个字节的NAL Header与若干整数节的负荷数据EBSP构成。

| NAL Header | EBSP |NAL Header | EBSP |

其中NAL Header只占用1个字节,次字节低5位表示NALU类型

四、视频采集编码格式

3.1 RGB颜色编码

红(Red)绿(Green)蓝(Blue),光的三原色

3.2 YUV颜色编码

YUV也是一种颜色编码方法,主要用于优化彩色视频信号的传递,常应用在各个视频处理组件中。
YUV主要用于优化彩色视频信号的传递,在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。与RGP相比,YUV只需要占用少量的频宽(RGB需要三个独立的视频信号同时传递)。 YUV是编译true-color颜色空间(color space)的种类,Y’UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠。“Y”表示明亮度(Luminance或Luma),也就是灰度(色调饱和度),“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色,如果只有Y数据,那么表示的图像就是黑白的。使用YUV格式才能极大的去除冗余数据,人眼对亮点信息更敏感,对色度敏感度不高,也就是说可以压缩UV数据,而人眼难以发现。 所以压缩算法的第一步,往往先把RGB数据转化为YUV数据,对Y少压缩一点,对UV多压缩一点,以平衡图像效果和压缩率。 这也是为什么编码选择使用YUV而非RGB

Gray = R040 +G0.59+B*0.11

3.3 NV21与I420

YUV因为采样和数据排列方式的不同,又分为不同的存储格式。
一般的Android摄像头输出为:NV21类型的YUB格式,而I420类型的YUV格式则是绝大多数编解码器的默认输入输出格式。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值