音视频基本概念
目录
音视频基本概念
音视频的几个率
- 帧率fps
- 游戏中都有这个属于,大都指的是每秒显示的图像帧数,或者说图形处理器每秒更新的次数
=24fps 电影基本这个帧率
- <30fps 游戏卡顿
60fps 流畅
75fps 肉眼不容易察觉出变化
- 码率:又称比特率,指每秒传送的比特(bit)数
单位:bps(Bit Per Second),bit单位太小,所以有 kbps
, Mbps, Gbps…
回顾换算
- 1 MB = 1024 KB
- 1 KB = 1024 Bytes
- 1 Byte = 8 bits
音视频文件大小计算
文件大小 = *bps dur
(bits) /8
(字节数) /1024
(KB) / 1024
(MB)
如时长4分钟,码率为128kpbs的MP3 ,size = 128460/(8*1024) = 3MB , 视频文件大小计算方式一样
- 分辨率
- 8k: 7680×4320
- 4k: 4096×2160
- 2k: 2048×1080
- 1080P: 1920×1080
- 720P: 1280×720
- ……
- 其中mac pro分辨率为: 2560 x 1600 普通屏幕基本为1080p,可以明显看出差别。
- 当然分辨率越高越清晰,现市面上8k屏幕较少,价格昂贵,且对带宽要求较高,5g时代来临后,量产化可能会普及。
- 刷新率Hz
- 垂直刷新率和水平刷新率,一般提到的是垂直刷新率
- 垂直刷新率指的是屏幕上的图像每秒重绘的次数。
- 刷新率越高,图像越稳定,越好点,对眼睛越好,不容易疲劳。75Hz以上不易觉察闪烁和抖动
- 帧率fps
PCM:Pulse Coding Modulation
脉冲编码调制:声音帧裸数据
- 量化格式
- 采样率:44.1Hz–>每秒钟采集44100个点,是指在每个声道上的采样速率,而不是所有声道的采样速率。
- 声道数:单声道、双声道、多声道
- pcm是采集到声音的裸数据,需要进行音频编码(压缩–>编码)进行传输,播放音频时需要进行音频解码(解压->解码)为pcm裸数据通过android接口或声卡节点输出
颜色空间模型
- YUV:视频帧裸数据
- 是一种颜色编码方法,对于视频帧的裸数据的表示方式,其主要应用于优化彩色视频信号的传输,向后兼容老式黑白电视机。
- Y:明亮度,UV:色度、饱和度
- 人对色度相对不敏感,所以视频编码时,会适当降低色度的宽带。
- RGB
- 红绿蓝三通道
- YUV:视频帧裸数据
编解码
- 硬解
- 依靠硬件进行解码,通过显卡的视频加速功能对视频进行解码,可以理解为有一个专门的电路板来进行视频的解码工作,是依靠GPU
- 调用GPU的专门模块编码来解码,减少CPU运算。显卡核心GPU拥有独特的计算方法,解码效率非常高,这样不但能够减轻CPU的负担,还有着低功耗,发热少等特点。
- 视频编码格式多样,兼容性不好,对滤镜、字母、画质、美颜等支持不够理想
- 对于android设备,目前用得比较多的芯片就是高通、海思和联发科,这些芯片大都集成了很多的功能,CPU、GUP、DSP、ISP包括视频解码、音频解码等等
- android中使用硬件解码的接口是MediaCodec,谷歌的ExoPlayer就是使用的MediaCodec进行解码。当然MediaPlayer也是android提供的硬件解码播放器,但是其封闭性,可够使用的接口并不能满足全部的需求,而且支持的协议较少,不好拓展。
- 硬编
- 依靠硬件进行编码,是硬解的对立方向操作。
- 软解
- 不依赖专门的硬件解码模块,依靠cpu运算来进行解码,因为不是独立模块,所有的程序都在用cpu,所以会增加cpu的运算
- 不需要依赖独立的硬件模块,兼容性较高。
- 依赖cpu性能,只要cpu够强悍,能做的事情也越多
- 软编
- 软解的反向操作,同软解。
- IPB帧
- 视频压缩中,每帧代表一幅静止的图像。而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的。
- I帧表示关键帧
- 这一帧画面的完整保留
- 解码时只需要本帧数据就可以完成
- 去掉的实在空间维度上的冗余信息
- 解码端必须接收到第一个I帧才可以正常解码出原始图片,否则无法正确解码
- 压缩率是7,与jpg差不多
- P帧表示前向预测编码帧
- 表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面,也叫差别帧、预测帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据。去掉的是在时间维度的冗余信息。
- 压缩率可以到20
- B帧是双向差别帧
- 也就是B帧记录的是本帧与前后帧的差别,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。去掉的是在时间维度的冗余信息。
- 压缩率可以达到50
- PTS和DTS
- PTS Decode TimeStamp: 解码时间戳
- DTS Presentation Time Stamp: 显示时间戳
- 由于IPB中B帧的存在导致下一帧被解码的时间会比显示的时间提前,导致PTS和DTS输出顺序不一致
- GOP:Group Of Picture
两个 I
帧之间的一组图片
必须为编码器设置gop_size
gop_size数值越大,画面质量越好。
- 硬解