- 音视频基础概念
- 音视频录制过程
- 音视频播放过程
- 图像基础概念
- RGB 格式
- YUV 格式
- RGB 和 YUV 的转换-为什么解码出错显示绿屏?
- YUV Stride 对齐问题
- H264 编码
- I 帧
- PTS(Presentation Time Stamp)
- DTS(Decode Time Stamp)
音视频录制过程
音视频播放过程
图像基础概念
- 像素:像素是一个图片的基本单位,英文即 pixel。
- 分辨率:是指图像的大小或尺寸。比如 1920x1080。
- 位深:是指在记录数字图像的颜色时,计算机实际上是用每个像素需要的位深来表示的。比如红色分量用 8bit。
- 帧率:在 1 秒钟时间里传输的图片的帧数,英文即 frames per second。
- 码率:视频文件在单位时间内使用的数据流量,英文即 bits per second。
- Stride:指在内存中每行像素所占的空间。为了实现内存对齐每行像素在内存中所占的空间并不一定是图像的宽度。比如分辨率 638x480 的 RGB24 图像,我们在内存处理的时候如果要以 16 字节对齐,则 6383/16=119.625 不能整除,因此不能 16 字节对齐,我们需要在每行尾部填充 6 个字节。就是(638+2->640), 6403/16=120。此时该图片的 stride 为 1920 字节。
RGB 格式
YUV 格式
与我们熟知 RGB 类似,YUV 也是一种颜色编码方法,它是指将亮度参量(Y:Luminance 或 Luma)和色度参量(UV:Chrominance 或 Chroma)分开进行表示的像素编码格式。这样分开的好处就是不但可以避免相互干扰,没有 UV 信息一样可以显示完整的图像,因而解决了彩色电视与黑白电视的兼容问题;还可以降低色度的采样率而不会对图像质量影响太大,降低了信号传输时对频宽(带宽)的要求。
YUV 分为两种格式,Packed 和 Planar。
Packed
Planar
YUV 采用 A:B:C 表示法来描述 Y,U,V 采样频率比例,下图中黑点表示采样像素点 Y 分量,空心圆表示采样像素点的 UV 分量。主要分为 YUV 4:4:4、YUV 4:2:2、YUV 4:2:0 这几种
YUV444P
YUV422P
YUV420P
YUV420SP
RGB 和 YUV 的转换-为什么解码出错显示绿屏?
R = Y + 1.402 (Y-128) G = Y - 0.34414 (U-128) - 0.71414 (U-128) B = Y + 1.772 (V-128)
解码失败时 YUV 三个分量都填 0 值,而有R=-126.598 G=135.45984 B=-126.228
而 RGB 取值为[0,255],则有R=0 G=135 B=0
,此时只有 G 分量有值,所以呈现为绿色。
YUV Stride 对齐问题
比如分辨率 638x480 的 YUV 图像,我们在内存处理的时候如果要以 16 字节对齐,则 638 不能被 16 整除,就需要在每行尾部填充 2 个字节,这就是 640,此时该图片的 Y stride 为 640 字节。
H264 编码
I 帧
I 帧(Intra coded frames):I 帧不需要参考其他画面而生成,解码时仅靠自己就重构完整图像;
- I 帧图像采用帧内编码方式;
- I 帧所占数据的信息量比较大;
- I 帧图像是周期性出现在图像序列中的,出现频率可由编码器选择;
- I 帧是 P 帧和 B 帧的参考帧(其质量直接影响到同组中以后各帧的质量);
- I 帧是帧组 GOP 的基础帧(第一帧),在一组中只有一个 I 帧;
- I 帧不需要考虑运动矢量;
PTS(Presentation Time Stamp)
PTS 主要用于表示解码后的视频帧什么时候被显示出来
DTS(Decode Time Stamp)
DTS 主要表示读入内存的 bit 流什么时候被送入解码器,也就是视频帧被解码的时间