一、音视频处理基本梳理
1.多媒体文件的理解
![](https://i-blog.csdnimg.cn/blog_migrate/3609bfced825c6f9a1632f8284e39231.png)
1.1 结构分析
多媒体文件本质上可以理解为一个容器
容器里有很多流
每种流是由不同 编码器编码的
在众多包中包含着多个帧(帧在音视频的处理中是最小单位)
1.2 封装格式
封装格式(也叫容器) 就是将已经编码压缩好的视频流、音频流及字幕流按照一定的方案放到一个文件中,便于播放软件播放。一般来说,视频文件的后缀就是它的封装格式。封装格式不一样,后缀名也就不一样(xxx.mp4 xxx.flv)。
1.3 音视频同步
Audio Master:同步视频到音频
Video Master: 同步音频到视频
External Clock Master: 同步音频和视频到外部时钟
1.4 音视频录制原理
![](https://i-blog.csdnimg.cn/blog_migrate/88cce82de3fb8539c5178fd75401afc4.png)
1.5 音视频播放原理
1.6 音视频播放原理
2.音视频的基础概念
2.1 声音
对自然界的声音进行采样,采样就是在时间轴上对信号进行数字化信号,即按照一定时间间隔t在模拟信号x(t)上逐点采取其瞬时值。采样率越高,声音的还原程度越高,质量就越好,同时占用空间会变大。
量化:用有限个幅度近似原来连续的幅度值把模拟信号的连续幅度变成有限数量的有一定间隔的离散值。【采样值的精确度取决于它用多小位来表示,这就是量化。例如8位量化可以表示256个不同的值,而CD质量的16位可以表示65536个值,范围-32769-32767】
我们来算下这个值:
编码:安装一定的规律把量化后的值用二进制数字表示,然后转化成二值或多值的数字信号流。这样得到的数字信号可以通过电缆,卫星通信等数字线路传输。接收端与上述过程相反。
编码如何理解:
我们在学校上学的时候应该听老师讲过哈夫曼编码,道理其实都一样。采用某种形式将某个值变成唯一的,有效的编码可以提高安全性、压缩数据等有效功效。
PCM:上面数字化的过程又称为脉冲编码调制,通常我们说音频的裸数据格式就是脉冲编码调制数据。描述一段PCM数据需要4量化指标:采样率、位深度、字节序、声道数。
采样率:每秒钟采样多少次,以Hz为单位。
位深度(Bit-depth):表示用多小个二进制位来描述采样数据,一般位16bit。
字节序:表示音频PCM数据存储的字节序是大端存储还是小端存储,为了数据处理效率高效,通常采用小端存储。
声道数(channel number):当前PCM文件中包含的声道数是单声道还是双声道
比特率:每秒传输的bit数,单位为bps(Bit Per Second)。间接衡量声音质量的一个标准。没有压缩的音频数据的比特率=采样频率*采样精度*通道数。
码率:压缩后的音频数据的比特率。码率越大,压缩效率越低,音质越好,压缩后数据越大。码率=音频文件大小/时长。
![](https://i-blog.csdnimg.cn/blog_migrate/cc8de6e8dd5c6ffbe663c12cb01ec843.png)
帧:每次编码的采样单元数。比如MP3通常是1152个采样点作为一个编码单元,AAC通常是1024个采样点作为一个编码单元。
帧长:可以指每帧播放的持续时间。每帧持续时间(秒)=每帧采样点数/采样频率(HZ)。也可以指压缩后每帧的数据长度。
音频编码:主要作用是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量,偏于存储和传输。
2.2图像
图像是客观对象的一种相似性的、生动性的描述或写真,是人类社会活动中最常用的信息载体。或者说图像是客观对象的一种表示,它包含了被描述对象的有关信息。它是人们最主要的信息源。
像素:屏幕显示是把有效面积化为很多个小格子,每个格子只显示一种颜色,是成像的最小元素,因此就叫做"像素"。
分辨率:屏幕在长度和宽度这两个方向上各有多少个像素,就叫做分辨率,一般用A x B来表示。分辨率越高,每个像素的面积越小,显示效果就越平滑细腻。
RGB表示图像:8bit表示一个子像素: 取值范围[0~255] 或者 [00~FF]。例如图像格式RGBA_8888,表示4个8bit表示一个像素,而RGB_565用5+6+5bit表示一个像素。一张1280*720的RGBA_8888格式的图片大小=1280 x 720 x 32bit。所以每一张图像的裸数据都是很大的。一部90分钟的电影,没秒25帧: 90 * 60 * 25 * 1280 * 720 * 32 bit = 463.48G。
YUV表示图像:YUV,是另外一种颜色编码方法,视频的裸数据一般使用 YUV 数据格式表示。Y 表示明亮度,也称灰度 值(灰阶值)。UY 表示色度,均表示影响的色彩和饱和度,用于指定像素的颜色。
亮度:需要透过 RGB 输入信号建立,方式为将 RGB 信号的特定部分(g 分量信号)叠加到一起。
色度:定义了颜色的色调和饱和度,分别用 Cr、Cb 表示,(C 代表分量(是 component 的缩写))。Cr 反映 RGB 输入信号红色部分与 RGB 信号亮度值之间的差异。Cb 反映 RGB 输入信号蓝色部分与 RGB 信号亮度值之间的差异。
★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。
见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
2.3视频
由于人类眼睛的特殊结构,画面快速切换时,画面会有残留( 视觉暂留),感觉起来就是连贯的动作。所以 ,视频就是由一系列图片构成的。
视频码率:指视频文件在单位时间内使用的数据流量,也叫码流率。码率越大,说明单位时间内取样率越大,数据流精度就越高。
视频帧率:通常说一个视频的25帧,指的就是这个视频帧率,即1秒中会显示25帧。帧率越高,给人的视觉就越流畅。
视频分辨率:分辨率就是我们常说的640x480分辨率、1920x1080分辨率,分辨率影响视频图像的大小。
帧:帧不需要参考其他画面而生成,解码时仅靠自己就重构完整图像。
视频的编码:编码的目的就是为了压缩, 让各种视频的体积变得更小,有利于存储和传输。国际上主流制定视频编解码技术的组织有两个,一个是“国际电联(ITU-T)”,它制定的标准 有 H.261、H.263、H.263+、H.264 等,另一个是“国际标准化组织(ISO)”它制定的标准有 MPEG-1、MPEG-2、 MPEG-4 等。
3.常用的音视频处理第三方库
3.2.1基本概念
FFmpeg(Fast Forward MPEG)是全球领先的多媒体框架,能够解码(decode)、编码(encode)、转码(transcode)、复用(mux)、解复用(demux)、流化(stream)、滤波(filter)和播放几乎人类和机器创造的所有多媒体文件。
3.2.2 FFmpeg 的主要基本组成
FFmpeg的封装模块AVFormat:AVFormat实现了多媒体领域绝大数媒体封装格式,包括封装和解封装,如MP4、FLV、KV、 TS等文件封装格式,RTMP、RTSP、MMS、HLS等网络协议封装格式。FFmepg是否支持某种媒体封装格式取决于编译时是否包含了该格式的封装库。
FFmpeg的编解码模块AVCodec:AVCodec包括大多数常用的编解码格式,既支持编码也支持解码。除了支持MPEG4、AAC、MJPEG等自带的媒体格式也支持H.264(x264编码器)、H.265(X265编码器