SPS、PPS

H.264 流中,有两种 NALU 极其重要

  • 序列参数集 (Sequence Paramater Set, SPS)
    • SPS 记录了编码的 Profilelevel、图像宽高等
    • 如果其中的数据丢失或出现错误,那么解码过程很可能会失败
  • 图像参数集 (Picture Paramater Set, PPS)

    每一帧编码后数据所依赖的参数保存于 PPS

一般情况 SPSPPSNAL Unit 通常位于整个码流的起始位置。
封装文件一般进保存一次,位于文件头部,SPS/PPS 在整个解码过程中复用,不发生变化。
然而对于实时流,通常是从流中间开始解码,因此需要在每个I帧前添加SPSPPS
如果编码器在编码过程中改变了码流参数(如分辨率),需要重新调整SPSPPS数据。

什么是 NAL

NAL (Network Abstract Layer),即网络抽象层
H.264/AVC 视频编码标准中,整个系统框架被分为了两个层面:

  • 视频编码层面 (Video Coding Layer, 即VCL)
    • 负责有效表示视频数据的内容
    • VCLH.264/AVC 的规格,意思是压缩后、去冗余(Visual Redundancy)的影像资料,其技术核心包括动作估计、转换编码、预测编码、去区块效应滤波及熵编码等
  • 网络抽象层面 (NAL)

    负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传播

视频编码层往往与网络抽象层(NAL)相互配合,标准的 NAL-unit 总共规范(Profile)有12种,这12种型式可粗分成 VCL NAL-unitnon-VCL NAL-unit,其中 VCL NAL-unit 是指 NAL-unit 中存放的完全是VCL的影像资料。

现实中的传输系统是多样化的,其可靠性,服务质量,封装方式等特征各不相同,NAL这一概念的提出提供了一个视频编码器和传输系统的友好接口,使得编码后的视频数据能够有效的在各种不同的网络环境中传输。

参考:

  • H264中的NALU概念解析
  • ffmpeg学习 编码为h264裸流添加sps、pps

你可能感兴趣的:(SPS、PPS)