FFmpeg编解码流程、H264浅析

FFmpeg编解码简易流程
image.png

4 H.264 的概念梳理
4.1 帧、分片、宏块(frame、slice、MB (Macro Block) 等)概念关系


image.png

其中,NAL ( Network Abstraction Layer) 网络抽象层,它是一种信息分包层类型,给编码的视频比特流加上某种前缀。涉及 NAL Unit 的目的是为视频数据的传输提供一种友好的网络环境。NAL Unit 是某种前缀如 “0x0001” 或者“0x001”之间的数据,这之间的数据映射到一个 NAL 单元。
NAL Unit 含 8 bit 的首部、RBSP(有效载荷类型),首部信息定了 NALU 类型,RBSP 字节用于有效载荷数据字节的对齐,这些数据包括起始码值但不包括起始码前缀。
H.264 中 NALU 在 AVPacket 间用 “0x0001” 分割,在 AVPacket 内部用 “0x001” 分割。
4.2 GOP
GOP(Group of Pictures)策略影响编码质量(压缩比)和传输质量。示意图如下:


PTS跟DTS

GOP 是序列中的一个图片集,用来辅助随机存取。GOP 的第一个图像必须为 I 帧,这样就能保证GOP 不需要参考其他图像,可以独立解码。一个 GOP 里含有一个 IDR、PPS、SPS。简单地讲,I 帧是关键帧,可以理解为一个完整的画面,而 P 帧和 B 帧记录的是相对于 I 帧的变化,P 帧表示跟前一帧的差别,B 帧表示前后帧差别。没有 I 帧,P 帧和 B 帧就无法解码。(来自百度百科)

解码与 B 帧的关系,B 帧提升了压缩率。同时造成 PTS、DTS 差异。注意,IDR帧是一种特殊的 I帧,在解码IDR帧前,清空所有前后向参考缓冲区,IDR帧随后的所有帧不需要参考 IDR 前面的任何帧。

image
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容