音视频基础扫盲之SPS和PPS的区别
目录
音视频基础扫盲之SPS和PPS的区别
好多刚入行做音视频开发的小伙伴,可能对SPS、PPS的了解,仅限于字面意思的解读,并没有太深入直观的了解,本文就二者区别,做个基础扫盲,高手可直接略过。
SPS(Sequence Parameter Set,序列参数集)和 PPS(Picture Parameter Set,图像参数集)都是 H.264/AVC 和 H.265/HEVC 等视频编码标准中的重要概念,它们的区别如下:
一、作用范围
- SPS
:
- 作用于整个视频序列。它包含了视频序列的全局参数,如档次(profile)、级别(level)、分辨率、帧率等与整个视频序列相关的重要特性信息。
- 例如,对于一个分辨率为 1920x1080、帧率为 30fps 的视频序列,这些参数会在 SPS 中进行描述,以确定整个视频的基本属性。
- PPS
:
- 作用于单个图像(帧)或一组图像。主要包含与图像编码相关的参数,如熵编码模式、量化参数、去块滤波强度等。
- 比如,在一个视频序列中,不同的图像可能会使用不同的量化参数和熵编码模式,这些参数在每个图像对应的 PPS 中进行指定。
二、包含的具体参数
- SPS
:
- 档次和级别信息 :用于指示视频编码的复杂度和能力。不同的档次和级别支持不同的分辨率、帧率、比特率等。例如,H.264 的高档次(High Profile)支持更高的编码效率和更多的编码工具,但也需要更高的计算资源。
- 分辨率信息 :包括图像的宽度和高度。这对于解码器正确解析和显示视频至关重要,解码器需要根据 SPS 中的分辨率信息来分配内存空间并进行图像的重建。
- 帧率信息 :指定视频每秒显示的帧数。例如,30fps 表示每秒显示 30 帧图像。
- 参考帧数量 :指示在编码过程中可以使用的参考帧的最大数量。更多的参考帧可以提供更好的压缩效果,但也会增加编码和解码的复杂度。
- PPS
:
- 量化参数 :用于控制编码过程中的量化程度。量化参数越大,图像的质量损失越大,但压缩比也越高。PPS 中的量化参数可以根据图像的特性进行调整,以在图像质量和压缩比之间取得平衡。
- 熵编码模式 :决定使用哪种熵编码方法,如 CABAC(Context-based Adaptive Binary Arithmetic Coding)或 CAVLC(Context-based Adaptive Variable Length Coding)。不同的熵编码模式具有不同的压缩效率和计算复杂度。
- 去块滤波强度 :用于控制解码后图像的去块滤波程度。去块滤波可以减少图像中的块效应,但过度的滤波可能会导致图像细节的损失。
三、解码过程中的作用
- SPS
:
- 在解码开始时,解码器首先解析 SPS,以获取视频序列的全局参数。这些参数用于初始化解码器的各种模块,如内存分配、帧率控制、参考帧管理等。
- 例如,根据 SPS 中的分辨率信息,解码器可以分配足够的内存空间来存储解码后的图像。同时,SPS 中的帧率信息可以用于控制解码后的视频播放速度。
- 如果视频序列中包含多个不同参数的视频片段,解码器需要在切换到新的视频片段时重新解析 SPS,以更新解码器的参数设置。
- PPS
:
- 对于每一个图像或一组图像,解码器在解析图像的编码数据之前,先获取对应的 PPS。PPS 中的参数用于指导当前图像的解码过程。
- 例如,根据 PPS 中的量化参数和熵编码模式,解码器可以正确地解码图像的编码数据。去块滤波强度参数则用于控制解码后图像的去块滤波处理,以提高图像的视觉质量。
四、传输和存储方式
- SPS 和 PPS 通常在视频流的开头部分进行传输或存储
:
- 在 H.264/AVC 和 H.265/HEVC 中,SPS 和 PPS 可以作为视频流的一部分,在视频序列的开头进行传输。这样,解码器可以在开始解码之前获取到这些重要的参数集。
- 它们也可以在存储的视频文件中进行存储,以便在播放视频时,解码器可以读取这些参数集并进行正确的解码。
- 可以通过特殊的编码方式进行标识和传输
:
- 为了便于解码器识别和解析 SPS 和 PPS,它们通常会使用特定的编码方式进行标识。例如,在 H.264/AVC 中,SPS 和 PPS 可以通过 nal_unit_type 字段进行标识,该字段的值分别为 7 和 8。
- 在传输过程中,SPS 和 PPS 可以通过单独的数据包进行传输,也可以与其他编码数据一起进行传输。