Qt+FFmpeg+opengl从零制作视频播放器-15.音视频一些知识

时间:2024-03-14 07:32:03

1.视频方面

本专栏只针对视频压缩数据为H.264的数据进行演示。

H264解码后的原始数据主要包括片(slice)、宏块(MB)以及YUV像素数据

  • 片是H264编码中的基本单元,它包含一帧图像的部分或全部数据。一个视频帧可以由一个或多个片组成,每个片最少包含一个宏块,最多可以包含整帧图像的数据。片的设计目的是为了限制误码的扩散和传输,确保编码片之间的独立性。
  • 宏块是H264编码的核心单位,由16x16的YUV数据组成。H264利用帧内压缩和帧间压缩的方式来提高编码压缩率,其中帧内压缩类似于静态图像压缩,而帧间压缩则涉及到帧与帧之间的关系。
  • YUV像素数据是解码后得到的直接可用于显示或进一步处理的图像数据。

原始视频数据会被压缩成I帧、P帧和B帧三种不同类型的视频帧。I帧是关键帧,包含完整的画面信息,而P帧和B帧则分别参考前后的I帧或P帧,记录与前后帧的差异信息。

DTS:解码的时间戳。

PTS:显示的时间戳。

对于音频来说,DTS和PTS是相同的;

对于视频来说,考虑到 I帧、B帧、P帧,所以一般不同。

GOP:两个I帧之间的一组图片,由一个I帧和多个B/P帧组成,是编解码器存取的基本单位。

  • 闭合式GOP:闭合式GOP只需要参考本GOP内的图像即可,不需参考前后GOP的数据。这种模式决定了,闭合式GOP的显示顺序总是以I帧开始以P帧结束
  • 开放式GOP:开放式GOP中的B帧解码时可能要用到其前一个GOP或后一个GO