目录
音视频录制原理
第一环节 采集到的数据借由时钟记录下或每秒二十帧,三十帧的数据(时钟信息的记录方便后续的音视频同步)
第二环节 对采集到的视频数据做修改,在亮度,对比度上做改善
第三环节 进入图像帧队列,等待视频编码器从帧队列中抽取
第四环节 复用器利用协议为音视频封装,之后合成数据流
音视频播放原理
和雷神的播放原理没有太大差别
只是在最后部分抽取帧队列时要进行对音频和视频的同步控制来保证同步,根据实际需要,也可以放置在音视频处理之后
常见分辨率
常见帧率
码率
百度百科:
视频码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。
通俗一点的理解就是取样率,单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件。
取视频文件的容量为3.446G,视频长度100分钟(6000秒),计算结果:码率约等于4818kbps(3.446 * 1024 * 1024 * 8 / 6000 = 4817.857)。
一般来说,如果是1M的宽带,在网上只能看不超过1024kbps的视频,超过1024kbps的视频只能等视频缓冲才能流畅的观看。
码率和画质一般成正比,之所以说是一般是因为码率到了一定大小再增加对画质的显著影响就几乎没有了
RGB
具体概念不再赘述,虽然说通常采用RGB的排列
但比如说在使用Opencv的时候就要把像素数据转化为BGR排列
FFmpeg提供了24bit的两种排列方式,和带透明通道32bit的四个排列方式
YUV
YUV包含了Y(亮度分量)和UV(色度参量)
可以看到只有Luma层图片只有黑白,其实都是介于黑白之间的某一个状态,来表示该处的颜色亮度
只有Chorma层,只有颜色信息,甚至没有特别清晰的轮廓,特别是肉的部分,颜色信息是几乎一致的
优势:降低色度采样率,较低的带宽也能带动高清图片的传输(一个Y分量就可以共用很多组颜色数据)——结合后面的采样模式
YUV格式
YUV有两种不同格式
Packed:几个相邻YUV(同一个像素点)排列在一起,几个相邻的像素组成一个宏像素
Planer:Y,U,V自己单独成组
YUV表示法
可以看到Y是每次必取
而UV就可以不是每次都要采样,可以让一个,两个,或四个共用一个U分量和一个V分量
444采样和422采样都是采用的Planer平面模式
4:2:0模式
I420格式示意图
仅有12个bit每像素的数据量,所以是最常用的数据存储方法
NV12格式示意图
在存储Y时是PLaner模式
而到了存储UV数据变成了Packer,在数据处理时一定要注意顺序
四大存储格式
YUV常见排错
颜色混乱:分辨率选错
有轮廓但颜色不真实:YUV类型选错
颜色灰白:选了RGB格式
(待补充)
YUV转RGB
附上一部分计算过程,在实际应用中调用FFmpeg自带的接口就好
为什么是绿屏?
YUV解码错误后,Y,U.V分量全都是0
经过RGB计算后
只有绿色能被RGB显示出来
YUV sride对齐问题
可以看到不满足16字节对齐下,Y分量要补齐到640
而U和V分量也要进行补1才能满足16像素对齐,在后续编码中会用到(420存储方式)
视频概念
I帧
- 能够独立解码
- 采用帧内编码
- 信息量较大
- 周期性的出现在图像序列中
- 是P帧,B帧的参考帧,决定了后续帧的质量
- 是帧组GOP的第一帧,在一个组中只有一个I帧
- I帧不用考虑运动矢量
P帧
不能独立解码,需要根据本帧和前一帧(只能是I或P)的不同点来压缩这一帧的数据
B帧
采用双向时间预测,大大提高压缩倍数,通俗点说就是前后都要参考一下
(GOP:I帧开始,可以通过I帧可以判断是否新的一个GOP开始)
常用视频压缩算法
音频基础
采样频率
为满足人能听到的声音频率需要,人耳能听到的频率范围是[20H~20kHz],所以采样频率一般为44.1Khz,这样就能保证声音到达20Khz也能被数字化,从而使得经过数字化处理之后,人耳听到的声音质量不会被降低。
采样量化(采样精度)
简单讲就是将波的幅度平均分为多少多少块,就是对声音做采样量化
常用的是16位量化 范围为[-32768, 32767]
音频比特率与码率
比特率:没经过压缩的音频:采样频率*采样精度*通道数
码率:压缩后的音频数据的比特率:大小(Bit)比上时长
帧
每次编码中包括的采样点个数,MP3通常是1152个 AAC通常是1024个(一个采样点里包括一个或多的声道数据)
帧长
每一帧持续播放的时间=每帧采样点数/采样频率
或是指压缩后每帧数据的数据长度(多少多少字节)
交错非交错模式
就是看LR声道数据是否交错排列
频谱掩蔽效应
时域掩蔽效应
前掩蔽是指人耳在听到强信号之前的短暂时间内,已经存在的弱信号会被掩蔽而听不到。
同时掩蔽是指当强信号与弱信号同时存在时,弱信号会被强信号所掩蔽而听不到。
后掩蔽是指当强信号消失后,需经过较长的一段时间才能重新听见弱信号
这些被掩蔽的弱信号即可视为冗余信号
封装格式
封装格式(也叫容器)就是将已经编码压缩好的视频流、音频流及字幕按照一定的方案放到一个文件中,便于播放软件播放。
只是一个容器罢了
想用哪个用哪个,比如本地保存一般就是MP4,流媒体传输一般就FLV
常见封装格式
音视频同步
DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。
PTS(Presentation Time Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。
同步方式和优先级
补充资料
《详解音频编解码的原理、演进和应用选型等》 https://www.jianshu.com/p/6b4c481f4294