音视频相关知识点
1. 帧率
定义为每秒显示帧数(frames per second,fps),或者赫兹(Hz)。
每秒显示帧数(fps)或帧率,表示图像处理器处理场时每秒能够更新的次数。高帧率可以得到更逼真更流畅的动画。一般来说30fps就是可以接受的,但是将性能提升到60fps则可以明显感受到逼真感。等过了75fps,提升就没那么明显了。
帧率并不是越高越好,如果超过了屏幕的刷新率,则会浪费图像处理能力。
此外,安卓里面有16ms刷新一次屏幕的说法
android
为了优化显示性能,android 4.1版本对Android Display系统进行了重构,实现了Project Butter,引入了三个核心元素,即VSYNC、Triple Buffer和Choreographer。
CPU/GPU根据VSYNC信号同步处理数据
Project Butter规定系统一旦收到vsync通知(16ms触发一次),CPU和GPU就立刻开始工作把显示数据写入buffer
2. 分辨率
视频分辨率指的是视频成像产品所形成的图像大小或者尺寸
3. 刷新率
刷新率指的是屏幕每秒画面被刷新的次数。刷新率分为垂直刷新率和水平刷新率。
通常说的刷新率通常是垂直刷新率。垂直刷新率表示屏幕上图像每秒重绘多少次,也就是每秒屏幕刷新的次数,以赫兹(Hz)为单位
4. 编码格式
编码的目的是压缩数据量,采用编码算法压缩冗余数据,常用的编码格式有:
- MPEG (MPEG-2、MPEG-4)
- H.26X (H.263、H.264/AVC 、H.265/HEVC)
4.1 视频编码
4.1.1 数据量的概念
例如:一张大小为1080*720的图像,帧率25FPS,一个像素用12位表示,那么可以作计算:
一帧图像的数据大小计算: 1080 * 720 * 12 / 8 / 1024 = 1139KB 约 1MB (一个字节有八位,1024Byte(字节)为1KB)
一秒图像的数据大小计算: 1MB * 25 = 25MB
一分钟的数据大小计算: 25MB * 60 = 1500MB 约1.6GB
可见,如果不进行压缩,视频很大,存储困难,传输困难
4.1.2 常见的视频编码格式
- MPEG-1
- MPEG-2
- MPEG-TS(Transport Stream(传输流)) 特点在 从视频流的任一片段开始都可以独立解码,电视节目是任何时候打开电视都可以解码(收看)的
- MPEG-PS(Program Stream(程序流)) 主要应用于存储具有固定时长的节目。 PS流包长不固定,而且比较长。适用于误码小,信道较好的环境。
- MPEG-4
- 具有很好的兼容性;
- MPEG-4有很好的压缩比,最高可达200:1
- MPEG-4在提供高压缩比的同时,对数据的损失很小。
- H264/AVC
- 同等的图像质量下,具有更高的数据压缩比
- WMV/WMV-HD/VC-1
- VC-1 压缩率介于H.264与MPEG-2之间,画面表现接近H.264,算法复杂度为H.264一样
4.2 音频编码
4.2.1 音频编码的作用
音频编码的作用是将**音频采样数据(PCM等)**压缩成音频码流
4.2.2 PCM的概念
音频的裸数据格式就是脉冲编码调制(Paulse Code Modulation,PCM)数据。
描述一段PCM数据需要:量化格式(sampleFormat)、采样率(sampleRate)、声道数(channel)
4.2.3 几种采样率
- 8khz:电话
- 22.05khz:广播
- 44.1khz: 音频CD
- 48khz: DVD、数字电视中使用
- 96khz-192khz: DVD-Audio、蓝光高清
采样精度常用范围在 8bit-32bit,而CD中一般使用16bit
4.2.4 音频中的比特率
比特率 = 采样率 × 采样深度 × 通道数
比如 采样率 = 44100,采样深度 = 16, 通道 = 2 的音频的比特率就是 1411200 bps
4.2.5 常见的音频编码格式
- WAV
- 在PCM数据格式的前面加上44字节,描述PCM的采样率、声道数、数据格式等信息,不会压缩
- 特点:音质好,大量软件支持
- 使用场合:多媒体开发的中间文件、保存音乐和音效素材
- MP3
- 使用LAME编码
- 特点:音质在128kbit/s以上表现不错,压缩比较高,大量软件硬件都支持,兼容性好
- 使用场合:高比特率(传输效率 bps, 这里的b是位,不是比特)对兼容性有要求的音乐欣赏
- AAC
- 特点:在小于128Kbit/s的码率下表现优异,并且多用于视频中的音频编码
- 使用场合:128Kbit/s以下的音频编码,多用于视频中音频轨的编码
- Ogg
- 特点: 可以用比MP3更小的码率实现比MP3更好的音质,高中低码率下均有良好的表现
- 不足:兼容性不够好,流媒体特性不支持
- 适合场景:语音聊天的音频消息场景
- APE
- 无损压缩
- FLAC
- 专门针对PCM音频的特点设计的压缩方式,而且可以使用播放器直接播放FLAC压缩的文件
- 免费,支持大多数操作系统
5. 封装格式
编码后的音视频数据以一定的格式封装到一个容器中,
封装格式就是酒瓶。酒瓶就不影响酒的口感,同样,封装格式一样不影响视频画质。它只负责把内部的视频轨和音频轨集成在一起,只起到一个文件夹(或者压缩包,或者理解为容器)的作用,并没有对视频轨和音频轨造成影响。
封装格式有 MKV、AVI、TS等。
6. 码率
码率也就是比特率,比特率是单位时间播放连续的媒体(比如压缩后的音频或者视频)的比特数量。比特率越高,带宽消耗得越多。比特(bit)就是二进制里面最小的单位,要么是0,要么是1.
文件大小 (b) = 码率 (b/s) × 时长 (s)
7. 画质与码率
视频质量和码率、编码算法都有关系,并不是码率越大,画质越好,视频越流畅
8. DTS与PTS
DTS: Decode Time Stamp,主要用于标识读入内存中的比特流在什么时候开始送入解码器中解码。
PTS: Presentation Time Stamp,主要用于度量解码后的视频帧什么时候被显示出来
9. YUV与RGB
- YUV: Y——亮度,UV——色差,U和V是构成颜色的两个分量
- RGB:颜色空间模型,通过对红(R),绿(G)、蓝(B)3个颜色通道的变化以及他们之间相互叠加来得到各种颜色
10. 视频帧以及音频帧
常见的视频帧有Inter Frame(I帧) P-Frame(P帧) B-Frame(B帧)
- I帧 表示关键帧。可以理解为一帧画面的完整保留,解码时候只需要本帧数据就可以完成
- P帧:表示这一帧和之前一个**关键帧(或者P帧)**的区别,解码时候需要使用之前缓存的画面叠加上本帧定义的差别生成最终画面。P帧只是差别帧,只保存与前一帧的差别,并没有完整的画面数据)
- B帧:双向差别帧,记录是本帧和前后帧的差别,要解码B帧,需要获得缓存画面,还要解码之后的画面,通过前后画面数据与本帧数据的叠加取得最后数据。B帧压缩率高,但是解码时候CPU比较吃力
音频帧则和编码格式相关,根据编码标准自己实现的
- PCM
- 根据采样率和采样精度就可以播放,不需要帧的概念
- AMR
- 每20ms就是一帧,每一帧音频都是独立的
- MP3
- 音频数据帧的个数由文件大小和帧长决定
- 每一帧的长度可能不固定,由比特率决定
- 每一帧又分为帧头和数据实体两个部分,帧头记录了MP3的比特率、采样率、版本等信息,帧之间相互独立
11. 量化精度
量化精度表示将模拟信号分成多少个等级,量化精度越高,音乐的声压振幅越接近原音乐。
量化精度的单位是bit(比特)(1 Byte needs 8 bit)
- CD标准的量化精度是16bit
- DVD标准的量化精度是24bit
可以理解为一个采样点要用多少bit表示( 8 / 16 / 24 / 32 bit)。
12. 采样率
采样率指的是每秒音频采样点个数,采样率单位为赫兹(Hz)
13. 声道
- 单声道:一个扬声器
- 立体声道:左右对称两个扬声器
- 4声道:前左、前右、后左、后右
- 5.1声道:
- 7.1声道:同上,左右分别有前置左(右)、侧边环绕左(右)、后置环绕左(右)
参考:
《Android音视频开发》