1 视频解码原理
对一个视频文件,首先解封装
,获取视频流、音频流,再解码
,音频流转成PCM,视频流转成YUV,最后分别送到声卡和显卡播放
2 概念
2.1 视频
(1)基本概念帧(frame)
:视频由连续的图像组成,每幅图像称为一帧帧率(frame-rate)
:每秒由多少帧构成,常见的帧率30fps、60fps分辨率
:图像由像素构成,一幅图由多少个像素构成,称为分辨率,例如1920×1080码率
:视频文件体积除以时间,单位一般是Kbps(Kbit/s)或者Mbps(Mbit/s)
(2)图像表示RGB
:使用红、绿、蓝三原色的亮度来定量表示颜色,一副图像,每个像素由RGB编码表示,每个原色占8bit,所以一个像素占用24bit=3字节。YUV
:人眼的视觉特点是对亮度更敏感,对位置、色彩相对来说不敏感。在视频编码系统中为了降低带宽,可以保存更多的亮度信息(luma),保存较少的色差信息(chroma)。Y表示明亮度,而U和V表示色度,如果没有UV分量,将显示黑白图像,即灰度图。
视频显示需要RGB,为了减少带宽,数据存储使用YUV。
(3)YUV格式
YUV 图像的主流采样方式有如下三种:
- YUV 4:4:4 采样
- YUV 4:2:2 采样
- YUV 4:2:0 采样
以YUV420为例,每四个Y分量共用一组UV分量,在每一行扫描时,只扫描一种色度分量(U 或者 V),和 Y 分量按照 2 : 1 的方式采样。比如,第一行扫描时,YU 按照 2 : 1 的方式采样,那么第二行扫描时,YV 分量按照 2:1 的方式采样。
YUV存储格式:
- planar 平面格式:指先连续存储所有像素点的 Y 分量,然后存储 U 分量,最后是 V 分量。
- packed 打包模式:指每个像素点的Y、U、V 分量是连续交替存储的。
(4)H264
帧类型:I帧
是关键帧,一副完整的图像, P帧
前向参考帧。B帧
是双向参考帧。 GOP
:两个I帧之间是一个图像序列,在一个图像序列中只有一个I帧。 IDR帧
:一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像。当解码器解码到 IDR 图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。
(5)PTS、DTS
DTS:解码时间戳,告诉播放器什么时候解码,基本不用
PTS:显示时间戳,告诉播放器什么时候显示数据
2.2 音频
音频的形成过程:采样——>量化——编码采样率
:每秒的采样次数,常见采样频率44.1kHZ、48kHZ、96kHZ声道数
:单声道(mono),立体音(两个或两个以上声道数, Stereophonic)采样位宽
:量化位数,常见 8bit 、16bit、32bit比特率
:每秒的传输速率, 比特率=采样率 * 单个的周期音频数据长度。如16bit 双声道 48KHz音频的比特率:48KHz * (16 * 2) = 1536kbps = 192 kbps
参考
雷霄骅
B站:FFMpeg视频播放器的制作-雷霄骅
一文读懂 YUV 的采样与格式