音视频开发》笔记"/>
《Android 音视频开发》笔记
视频编码
主要作用是将视频像素数据(RGB YUV等)压缩成为视频码流,从而降低视频的数据量
1)MPEG系列(Moving Picture Experts Group,运动图像专家组)
- MPEG1:VCD用
- MPEG2:DVD用,但DVD音频没有采用MPEG
- MPEG4:DVDRIP使用的是它的变种,DivX、XviD
- MPEG4 AVC
- 还有音频编码方面的, MPEG Audio Layer 1/2、MPEG Audio Layer 3(mp3)、MPEG-2 AAC、MPEG-4 AAC等。
2)H.26X系列
- H.261、H.262、H.263、H.263+、H.263++、H.264、H.265
视频封装格式 (容器)
将编码后的音频数据和视频数据,按照一定的格式打包到一个文件中
1)FLV
支持的视频编码:H.264等
支持的音频编码:MP3 PCM AAC等
2)TS
支持的视频编码:H.264等
支持的音频编码:AAC等
3)MP4
支持的视频编码:H.263 H.264等
支持的音频编码:AAC等
有损
4)MKV
支持的视频编码:几乎所有格式
支持的音频编码:几乎所有格式
5)MOV
支持的视频编码:几乎所有格式,如 H.264 H.265
支持的音频编码:几乎所有格式
音频编码
1)音频编码器
如:opus、aac、ogg、amr、g.711、wav
AAC 在直播系统中应用的比较广泛;
OPUS 是较新的音编码器,WebRTC默认使用OPUS;
固话一般用的 G.711系列。
opus
有损
2)AAC,即Advanced Audio Coding 高级音频编码
一种专为声音数据设计的文件压缩格式;
在感觉声音质量没有明显降低的情况下,可使文件更加小巧。
优点:相对于MP3,AAC格式的音质更佳,文件更小,要取代 MP3;
缺点:AAC属于有损压缩格式,与APE、FLAC等无损压缩格式相比音质存在差距。
目前常用的规格有:AAC LC、AAC HE V1、AAC HE V2
AAC LC(Low Complexity):低复杂度规格,码流是128k,音质好
AAC HE V1:等于 AAC LC + SBR(Spectral Band Replication),其核心思想是按频谱成分保存。低频编码保存主要成分,高频单独放大编码保存音质。码流在 64k 左右
AAC HE V2:等于 AAC LC + SBR + PS(Parametric Stereo),其核心思想是双声道中的声音存在某种相似性,只需要存储一个声道的全部信息,然后花很少的字节用参数描述另一个声道和它不同的地方。
AAC Header: /
3)AC3
Audio Coding Version 3
有损音频编码格式
广泛应用于5.1声道
应用于激光唱片和DVD:384 - 448 kb/s的码率
应用于电影院:640 kb/s的码率
5个全频域声道 + 1个超低音声道组成,被称为5.1声道;
5个全频域声道:左前、中央、右前、左后、右后
超低音声道:提供一些额外的低音信息,使一些场景(如爆炸、撞击等)的声音更好。
音频封装格式(容器)
1)MP3
Moving Picture Experts Group Audio Layer III ,动态影像专家压缩标准音频层面3
一种音频压缩技术;
被用来大幅降低音频数据量;
利用MP3技术,将音乐以1:10甚至1:12的压缩率,压缩成容量小的文件,重放的音质与最初的不压缩音频相比没有明显下降;
利用人耳对高频声音信号不敏感的特性,将时域波形信号转换成频域信号,并划分多个频段,对不同的频段使用不同的压缩率,对高频信号使用大压缩率(甚至忽略信号),对低频信号使用小压缩率,保证信号不失真;相当于抛弃了人耳基本听不到的高频声音,只保留能听到的低频部分。
有损
2)WMA (Windows Media Audio)
1:18 的压缩率
有损
3)AAC (Advanced Audio Coding)
有损
4)WAV
无损
支持 PCM 数据存储
音频重采样
将音频的 采样率、采样大小、通道数 的值,转成另外一组值。
为什么重采样?
1、从设备采集的音频数据 与 编码器要求的数据不一致
2、扬声器要求的音频数据 与 要播放的音频数据不一致
3、更方便运算,比如双声道的音频数据,在做回声消除的时候,转成单声道更方便处理。
视频基本参数
1)帧率 Frame Rate
是用于测量显示帧数的量度。
测量单位:每秒显示帧数(frames per second, fps)或赫兹( Hz )
每秒显示帧数fps或帧率表示图像处理器处理场时每秒能更新的次数。
高频率可以得到更流畅、更逼真的动画。30fps就是可以接受的,但是将性能提升至60fps则可以明显提升交互感和逼真感,但是超过75fps就不容易察觉有明显的流畅度提升。
如果帧率超过屏幕刷新率,则只会浪费图象处理能力,因为监视器不能以这么快的速度更新,这样超过刷新率的帧率就浪费掉了。
从网上找了个查看屏幕刷新帧率的地址:/
来自博文:手机刷新率测试网站
2)码率/比特率 bit rate
-
视频:
码率也就是比特率(bit rate),比特率的单位是bps,单位时间播放连续的媒体(如压缩后的音频或者视频)的比特数量。 (1Byte = 8bit )
比特率越高,带宽消耗得越多。
比特(bit)就是2进制里面最小的单位,0 / 1
文件大小(b) = 码率(b/s) * 时长(s)
计算示例:
假设码率为800kbps,1s会产生多大的文件呢?
800kbps * 1s = 800kb = 100kB = 0.1MB
以该方式换算的话:1MB = 1000kB = 8000kb -
音频:
采样率 x 采样大小 x 声道数
采样率:44.1KHz、采样大小:16bit、双声道的PCM编码的WAV文件
码率为:44.1K x 16 x 2 = 1411.2 Kb/s
3)分辨率 resolution
视频成像产品所形成的图象大小或尺寸;
通常 “横向像素数 x 纵向像素数”来表示,如 1280 x 720;
常见的宽高比:16:9 或 4:3
一般情况下,画面编码的码率固定时,分辨率越大,画面越模糊;码率越高,画面越清晰。
4)视频帧:I P B帧
I帧:关键帧,可以理解为这一帧画面的完整保留,解码时只需要本帧数据就可以完成(因为包含完整画面)
I帧特点:
1)它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码后传输。
2)解码时仅用I帧的数据就可以重构完整图像。
3)I帧描述了图像背景和运动主体的详情
4)I帧不需要参考其它画面生成
5)I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量)
6)I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧。
7)I帧不需要考虑运动矢量
8)I帧所占数据的信息量比较大
P帧:这一帧和之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别生成最终画面(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)
P帧的预测与重构:P帧以I帧为参考帧,在I帧中找出P帧“某点”的预测值和运动矢量,去预测差值和运动矢量一起传送。接收端根据运动矢量从I帧中找出P帧“某点”的预测值并与差值相加以得到P帧“某点”的样值,从而得到完整的P帧。
P帧特点:
1)P帧是I帧后面相隔一两帧的编码帧
2)P帧采用运动补偿的方法传送它与前面的I帧或P帧的差值及运动矢量(预测误差)
3)解码时必须将I帧的预测值与预测误差求和后才能重构完整的P帧图像
4)P帧属于前向预测的帧间编码。它只参考前面最靠近它的I帧或P帧。
5)P帧可以是其后面P帧的参考帧,也可以是其前后B帧的参考帧
6)由于P帧是参考帧,所以它可能造成解码错误的扩散
7)由于是差值传送,所以P帧的压缩率比较高
B帧:双向差别帧,也就是B帧记录的是本帧和前后帧等差别,要解码B帧,不仅要得到之前的缓存画面,还要解码之后的画面,通过前后画面数据与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较吃力。
B帧的预测与重构:B帧以前面的I帧或P帧和后面的P帧作为参考帧,“找出”B帧“某点”的预测值和两个运动矢量,并取预测差值和运动矢量传送。接收端根据运动矢量从两个参考帧中“找出(算出)”预测值并与差值求和,得到B帧“某点”的样值,从而得到完整的B帧。
B帧特点:
1)B帧是由前面的I帧或P帧和后面的P帧来进行预测的
2)B帧传送的是它与前面的I帧或P帧和后面的P帧之间的预测误差及运动矢量
3)B帧是双向预测编码帧。
4)B帧压缩率最高,因为它只反应两参考帧间运动主体的变化情况,预测比较准确。
5)B帧不是参考帧,不会造成解码错误的扩散。
可以简单理解为,1帧就是编码后的一幅图像。
I帧的压缩率是7,P帧是20,B帧是50.
5)GOP 图像组Group Of Picture
两个I帧之间的帧的数目。
增加GOP的长度,整个视频的I帧数目将会减少,由于I帧在编码数据上比P帧大,因此更长的GOP能够有效的减少视频编码数据的量,进而减少带宽和存储内存占用。
音频基本参数
1)采样率 sample reate 单位Hz
指每秒音频采样点个数(如:8KHz、16KHz、32KHz、44.1KHz、48KHz)
单位:Hz赫兹
20Hz以下为次声波,20000Hz以上为超声波。
2)位宽 sample size (或称为:采样大小 / 量化精度 / 位深)
可以将模拟信号分成多少个等级,量化精度越高,音乐的声压振幅越接近原音乐。
量化精度的单位为bit(比特),CD标准的量化精度为16bit,DVD标准的量化精度为24bit。
可以理解为一个采样点用多少bit表示(8/16/24/32bit)
3)声道 sound channel
指声音在录制或播放时在不同空间位置采集或者回放的相互独立的音频信号,所以声道数也就是声音录制时的音源数量或回放时相应的扬声器数量。
常见声道:单声道、立体声道、4声道、5.1声道、7.1声道等
单声道:设置一个扬声器
立体声道:把单声道一个扬声器扩展为左右对称的两个扬声器。声音在录制过程中被分配到两个独立的声道,从而达到很好地声音定位效果。
4声道:4声道环绕规定了4个发音点,分别是前左、前右、后左、后右,听众则被包围在中间。同时还建议增加一个低音音箱,以加强对低频信号的回放效果(4.1声道音箱系统)
5.1声道:来源于4.1声道;5个全频域声道 + 1个超低音声道组成;5个全频域声道(左前、中央、右前、左后、右后);超低音声道(提供一些额外的低音信息)
7.1声道:在5.1声道系统的基础上增加了中左、中右两个发音点
4)音频帧
PCM:未经编码的音频数据,它根本就不需要帧的概念,根据采样率和采样精度就可以播放。
数据量大小(b/s) = 采样率(Hz) X 采样位数bit X 声道数
比如采样率为44.1kHz,采样精度为16位的音频,单声道,1s的数据量大小为:
44.1 * 1000 * 16 * 1 = 705600 b = 88200 B = 88.2kB = 0.0882 MB
ARM:它规定每20ms的音频为1帧,每一帧音频都是独立的,有可能采用不同的编码算法以及不同的编码参数。
MP3:帧比较复杂一些,包含了更多的信息,比如采样率、比特率等各种参数。音频数据帧个数由文件大小和帧长决定,每一帧的长度可能不固定,也可能固定,有比特率决定,每一帧又分为帧头和数据实体两部分,帧头记录了MP3的比特率、采样率、版本等信息,每一帧之间相互独立。
名词术语
刷新率
指屏幕每秒画面被刷新的次数;
刷新率分垂直刷新率和水平刷新率,一般提到的刷新率通常指垂直刷新率。
垂直刷新率表示屏幕上图象每秒重绘多少次,也就是每秒屏幕刷新的次数,以赫兹Hz为单位。
刷新率越高,图象越稳定,越自然清晰,对眼睛的影响越小;
刷新率越低,图象闪烁和抖动得就越厉害,眼睛疲劳得就越快。
一般来说,如能达到80Hz以上的刷新率,就可以完全消除图象闪烁和抖动感,眼睛也不太容易疲劳。
编码格式
编码的目的是压缩数据量,采用编码算法压缩冗余数据。
MPEG ( MPEG-2 、MPEG-4)
H.26X ( H.263、H.264、H.265 )
封装格式
把编码后的音视频数据以一定格式封装到一个容器,封装格式有:MKV、AVI、TS等
画质与码率
码率越大,画质越好,视频越流畅??错误!
视频质量和码率、编码算法都有关系
DTS 与 PTS
DTS:
Decode Time Stamp,主要用于标示读入内存中的比特流在什么时候送入解码器中进行解码。
PTS:
Presentation Time Stamp,主要用于度量解码后的视频帧什么时候被显示出来。
YUV (YCbCr)
颜色空间模型YUV
是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制式采用的颜色空间模型
Y:亮度; UV:色差,U和V是构成颜色的两个分量
用于采集与编码
主要的采样格式:YUV4:2:0、YUV4:2:2、YUV4:4:4
YUV4:4:4
YUV4:2:2
YUV4:2:0
YUV4:2:0 存储格式:
planar(平面)
I420 : YYYYYYYY UU VV => YUV420P
YV12 : YYYYYYYY VV UU => YUV420P (iOS)
packed(打包)
NV12 : YYYYYYYY UVUV => YUV420SP
NV21 : YYYYYYYY VUVU => YUV420SP (Android)
RGB
颜色空间模型RGB
是一种颜色空间模型,通过对红R、绿G、蓝B 3个颜色通道的变化以及他们相互之间的叠加来得到各式各样的颜色,RGB即代表红绿蓝3个通道的颜色
用于屏幕图像的展示
声音
声音是由物体振动产生的;可以通过空气、固体、液体等进行传输;振动鼓膜。
听觉频率范围(Hz) | 发声频率范围(Hz) | |
---|---|---|
人 | 20 - 20000 | 85 - 1100 |
狗 | 15 - 50000 | 452 - 1800 |
猫 | 60 - 65000 | 760 - 1500 |
蝙蝠 | 1000 - 120000 | 10000 - 12000 |
鲸鱼 | 150 - 150000 | 7000 - 120000 |
20Hz以下为次声波,20000Hz以上为超声波。
声音三要素
音调:音频的快慢 男生 < 女生 < 儿童
音量/响度:震动的幅度,人耳感受到的声音的强弱;同一声源,传播的越远,音量/响度越小;当距离一定时,振幅越大,音量/响度越大。
音色:谐波
分贝
.shtml
音频压缩
1)音频有损压缩
音频压缩技术是在保证信号在听觉方面产生失真的前提下,对音频数据进行尽可能大的压缩。
压缩的主要方法是去除采集到的音频冗余信息。所谓音频冗余信息包括人耳听觉范围外的音频信号以及呗遮掩掉的音频信号。
信号的遮蔽可以分为 频域遮蔽 和 时域遮蔽。
频域遮蔽:
时域遮蔽:
2)音频无损压缩
压缩前 和 压缩后 的数据,完全一致
熵编码
哈夫曼编码
算术编码
香农编码
视频压缩
1)帧间压缩 (有损)
连续的视频其相邻帧之间,具有冗余信息,压缩相邻帧之间的冗余量,提高压缩率;
同个GOP内;
参考帧;
运动估计(宏块匹配+运动矢量);
运动补偿;
帧间差算法是一种典型的时间压缩法,它通过比较本帧与相邻帧之间的差异,仅记录本帧与相邻帧的差值,这样可以大大减少数据量。
2)帧内压缩 (有损)
也称空间压缩,仅考虑本帧的数据,不考虑相邻帧之间的冗余数据;
帧内一般采用有损压缩算法,由于帧内压缩时各个帧之间没有相互关系,压缩后的视频数据仍可以以帧为单位进行编辑。
帧内压缩一般达不到很高的压缩。
相邻像素差别不大,可以进行宏块预测;
人对亮度的敏感度超过色度;
YUV 很容易将亮度与色度分开。
3)整数离散余弦变换(DCT) (无损)
将空间上的相关性变为频域上无关的数据然后进行量化
4)CABAC压缩 (无损)
宏块
宏块是视频压缩操作的基本单元;
无论是帧内压缩还是帧间压缩,它们都是以宏块为单位。
音视频处理
1) 采集
从设备中获取到音视频数据的操作过程,叫采集
采集到的音频数据,通常是 PCM 数据;采集到的视频数据,通常是 YUV 或 RGB 数据;这些都是音视频的原始数据。
YUV:I420、NV12、NV21
RGB:RGBA、BGRA
2) 预处理
对音视频的原始数据直接进行波形或色彩处理的操作,叫做预处理
预处理操作有:音频变声或变调等,视频的美颜或滤镜或人脸识别等
3) 编解码
编码是为了对音视频数据进行压缩,编码的方式叫做编码算法
常见的视频编码算法:H.264、MPEG2
常见的音频编码算法:AAC、Opus
解码:将音频/视频压缩编码数据,解码成非压缩的音频/视频原始数据。
通过解码,压缩编码的视频数据 输出 非压缩的颜色数据,YUV420P、RGB等。
通过解码,压缩编码的音频数据 输出 非压缩的音频抽样数据,PCM数据。
4) 封装文件
将编码后的音频数据和视频数据打包成一个文件的过程,叫封装
封装后的常见文件格式:.flv、.mp4、.ts、.mp3、.aac
解封装:将输入的封装格式的数据,分离成 音频流压缩编码数据 和 视频流压缩编码数据。
5) 音视频协议 / 流媒体协议
用于传输音视频文件的网络协议叫 音视频协议或流媒体协议
常见的协议:rtmp、hls、http、udp、rtp/rtcp
解协议:将流媒体协议的数据,解析为标准的相应封装格式的数据
6) 媒体元数据 metadata
是保存在封装文件中,用来记录音视频编码数据参数及文件信息的内容。
播放器在播放音视频文件时,根据 metadata 进行播放参数配置,如解码器类型、解码参数等。
7) 渲染
将解码后得到的音视频数据(PCM、YUV/RGB等)处理并显示的过程,用于实现渲染的组件被称为渲染器
8) 播放器
指包含了协议解析、解封装、解码器、渲染器等用于音视频播放过程的工具。
9) 音视频编解码流程逻辑图
屏幕指标
1) PPI (pixels per inch)
每英寸所拥有的像素数
用来描述屏幕的像素显示密度,值越高,屏幕的显示能力越强。
PPI > 300,达到视网膜基本,无法区分是否由像素组成的,不能看出里面小的点。
2) DPI (Dots per inch)
每英寸显示的点数
用来描述图片显示的清晰度,
一般情况下,DPI == PPI
参考:
《Android 音视频开发》何俊林
手机刷新率测试网站
更多推荐
《Android 音视频开发》笔记
发布评论