一、视频编码
- 定义: 通过特定的压缩技术,将某个视频格式转换成另一种视频格式文件的方式
- 解编码标准:
-
- 国际电联(H.26X系列) :H.261、H.263、H.264(侧重网络传输)
- 运动静止图像专家组:M-JPEG
- 国际标准化组织运动图像专家组:MPEG
- 互联网广泛应用:Real-Networks的RealVideo
- 微软:WMV
- Apple公司:QuickTime
二、音频编码
常见的音频编码格式:
- AAC: 一种专为声音数据设计的文件压缩格式。
-
- 优点:相对于MP3,AAC格式的音质更佳,文件更小
- 缺点:属于有损压缩格式
- MP3: 全称是动态影像专家压缩标准音频层面3,用于大幅度地降低音频数据量(1:10甚至1:12的压缩率)。
-
- 原理:利用人耳对高频声音信号不敏感的特性,将时域波形信号转换成频域信号,并划分成多个频段,对高频信号使用大压缩率,对低频信号使用小压缩率。
- AC3: 普及程度很高,以384-448kb/s的码率应用于激光唱片和DVD,也经常以640kb/s的码率广泛应用于电影院。AC3提供的环绕声系统由5个全频域声道和1个超低音声道组成,被称为5.1声道。
-
- 5个全频域声道包括左前、中央、右前、左后、右后。
- 超低音声道主要提供一些额外的低音信息,使一些场景(如爆炸、撞击)的声音效果更好
三、多媒体播放组件(Android、iOS)
3.1 Android
- MediaPlayer: 播放控制。
- MediaCodec: 音视频编解码。
- OMX: 多媒体部分采用的编解码标准。
- StageFright: 一个框架,代替之前的OpenCore,主要做了一个OMX层,仅仅对OpenCore的omx-component部分做了引用。StageFright是在MediaPlayerService这一层加入的,和OpenCore是并列的。StageFright在Android中是以共享库的形式存在的(libstagefright.so),其中的module——NuPlayer/AwesomePlayer可用来播放音视频。NuPlayer/AwesomePlayer提供了许多API,可以让上层的应用程序(Java/JNI)调用。
- AudioTrack: 音频播放。
3.2 iOS
- VideoToolBox: 一个底层框架,提供对硬件编码器和解码器的直接访问。为视频压缩和解压缩提供服务,并用于CoreVideo像素缓冲区中存储的栅格之间的转换。这些服务是以会话对象的形式(压缩、解压缩和像素传输),作为核心基础(CF)类型提供的。不需要直接访问硬件编码和解码器的应用程序都不需要直接使用VideoToolBox。
- AudioToolBox: 这个框架可以将比较短的声音注册到System Sound服务上。注册到System Sound服务上的声音被称为System Sounds。它必须满足下面几个条件:
-
- 播放时间不能超过30s
- 数据必须是PCM或者IMA4流格式的
- 必须被打包成下面3种格式之一:①Core Audio Format(.caf)②Waveform Audio(.wav)③Audio Interchange File(.aiff)
- AVPlayer: AVPlayer既可以播放音频,也可以播放视频。
-
- 使用需要导入AVFoundation.framework框架,再引入头文件#import<AVFoundation/AVFoundation.h>
四、常见的多媒体框架及解决方案
- VLC(Video LAN Client): 一款自由、开源的跨平台多媒体播放器及框架。
- FFmpeg: 多媒体解决方案,不是多媒体框架,广泛应用于音视频开发中。
- GStreamer: 一套构建流媒体应用的开源多媒体框架。
五、相关知识点
5.1 帧率
- 定义: 帧率是用来测量显示帧数的量度。
- 单位: 每秒显式帧数(frames per second,简称fps)或“赫兹”(Hz)
帧率表示图形处理器处理场时每秒能够更新的次数。高帧率可以得到更流畅,更逼真的动画。
一般来说,30fps就是可以接受的,但是将性能提升至60fps则可以明显提升交互感和逼真感,但是超过75fps就不容易察觉有明显的流畅度变化了。
如果帧率>屏幕刷新率,只会浪费图像处理能力,因为监视器不能以这么快的速度更新。
5.2 分辨率
视频分辨率: 视频成像产品所形成的图像大小或尺寸。
5.3 刷新率
- 定义: 屏幕每秒画面被刷新的次数。
-
- 垂直刷新率:一般提到刷新率通常指垂直刷新率。垂直刷新率表示屏幕上图像每秒重绘多少次,也就是每秒屏幕刷新的次数,以Hz为单位。刷新率越高,图像就越稳定,图像显示就越自然清晰。对眼睛的影响也越小。刷新率越低,图像闪烁和抖动得就越厉害,眼睛疲劳得就越快。一般来说,如果能达到80Hz以上的刷新率,就可以完全消除图像闪烁和抖动感,眼睛也不太容易疲劳。
- 水平刷新率
5.4 编码格式
编码的目的是压缩数据量,采用编码算法压缩冗余数据。常用的编码格式有如下两种:
- MPEG(MPEG-2,MPEG-4)
- H.26X(H.263,H.264,H.265/HEVC)
5.5 封装格式
把编码后的音视频数据以一定格式封装到一个容器,封装格式有MKV、AVI、TS等。
5.6 码率
码率也就是比特率,比特率是单位时间播放连续的媒体(如压缩后的音频或视频)的比特数量。比特率越高,带宽消耗的越多。比特(bit)就是二进制里面最小的单位,要么是0,要么是1。
文件大小(b)= 码率(b/s)* 时长(s)
误区:码率越大,画质越好,视频越流畅
这是错误的说法,实际上视频质量和码率、编码算法都有关系
5.7 DTS与PTS
- DTS(Decode Time Stamp): 主要用于标示读入内存中的比特流在什么时候开始送入解码器进行解码。
- PTS(Presentation Time Stamp): 主要用于度量解码后的视频帧什么时候被显式出来。
5.8 YUV与RGB
- YUV: 是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制式采用的颜色空间模型。其中Y、U、V几个字母不是英文单词的首字母。Y代表亮度,UV代表色差,U和V是构成颜色的两个分量。
- RGB: 是一种颜色空间模型,通过对红(R)、绿(G)、蓝(B)3个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色,RGB即代表红、绿、蓝3个通道的颜色。
5.9 视频帧及音频帧
常见的视频帧有I、P、B帧
- I帧: 表示关键帧,你可以理解为这一帧画面的完整保留,解码时只需要本帧数据就可以完成(因为包含完整画面)
- P帧: 差别帧,没有完整画面数据,只有与前一帧的画面差别的数据。表示的是这一帧和之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别生成最终画面
- B帧:双向差别帧,也就是B帧记录的是本帧与前后帧的差别(比较复杂,有4种情况)。要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面数据与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较吃力。
音频帧的概念没有视频帧那么清晰,几乎所有视频编码格式都可以简单认为1帧就是编码后的一副图像。但音频帧和编码格式相关,它是各个编码标准自己实现的。
- 对PCM(未经编码的音频数据) 来说,它根本就不需要帧的概念,根据采样率和采样精度就可以播放。比如采样率为44.1kHz,采样精度为16位的音频,你可以算出比特率为4410016b/s,每秒的音频数据是固定的4410016/8字节
- AMR帧比较简单,它规定每20ms的音频就是一帧,每一帧音频都是独立的,有可能采用不同的编码算法以及不同的编码参数。
- MP3帧比较复杂,包含了更多信息,比如采样率、比特率等各种参数。具体如下:
-
- 音频数据帧个数由文件大小和帧长决定,每一帧的长度可能不固定,也可能固定,由比特率决定,每一帧又分帧头和数据实体两部分。帧头记录了MP3的比特率、采样率、版本等信息,每一帧之间相互独立。
5.10 量化精度
量化精度表示可以将模拟信号分为多少个等级,量化精度越高,音乐的声压振幅越接近原音乐。量化精度的单位是bit(比特),CD标准的量化精度是16bit,DVD标准的量化精度是24bit。也可理解为一个采样点用多少bit表示(8/16/24/32bit)。
5.11 采样率
采样率指每秒音频采样点个数(8000/44 100Hz),采样率单位用Hz(赫兹)表示。
5.12 声道
声道是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,所以声道数也就是声音录制时的音源数量或回放时相应的扬声器数量。
-
单声道: 设置一个扬声器
-
立体声道: 把单声道一个扬声器扩展为左右对称的两个扬声器。声音在录制过程中被分配到两个独立的声道,从而达成了很好的声音定位效果。
-
4声道: 4声道环绕规定了4个发音点,分别是前左、前右、后左、后右,听众则被包围在中间。同时还建议增加一个低音音响,以加强对低频信号的回放处理。
-
5.1声道: 来源于4.1声道系统,将环绕声道一分为二,分为左环绕和右环绕,中央位置增加重低音效果。
-
7.1声道: 7.1声道系统在5.1声道系统的基础上又增加了中左和中右两个发音点。