H264的打包,nal,es,pes,pts,dts,ps,ts

发布于:2024-03-04 ⋅ 阅读:(64) ⋅ 点赞:(0)

编码层次

  • 视频编码层:预测、变换、量化、熵编码等操作
  • slice层:将视频帧分割成若干个编码单元,包含一定数量的宏块,提高编解码的并行性和容错性。
  • NAL层:提升对网络传输和数据存储的亲和性

视频编码层

  • 基准-Baseline Profile:主要用于视频会议、可视电话等实时通信领域;支持IP帧,熵编码支持 CAVLC 算法
  • 主要-Main Profile:主要用于数字电视广播、数字视频数据存储等;支持视频场编码、IPB帧。熵编码支持 CAVLC 和 CABAC
  • 扩展-Extended Profile:主要用于网络视频直播和点播等;支持基准所有特性,支持 SI 和 SP 条带

编码的概念

  • 序列:一组变化不大的图像
  • 帧:一个视频图像编码后的数据,一帧由一片或多片组成、一片由多个宏块组成。宏块是编码的基本单位
  • GOP:图像组,类似与序列
  • IDR:立即刷新帧,一定是 I帧,清空参考帧缓冲区

分层结构

在这里插入图片描述

  • SODB:视频编码层输出编码的数据后,经过数据划分,输出 SODB(String of Data Bits)数据比特串

  • RBSP:NAL层 将 SODB 打包成 RBSP (Raw Byte Sequence Payload)原始字节序列负载,在SODB 后面添加1和若干0字节对齐

  • EBSP:Encapsulated Byte Sequence Payload, 扩展字节序列载荷,RBSP加上NAL头就是一个NALU 单元,起始码 三字节的 0x000001 或 四字节的 0x00000001。access unit ,pps,sps 是 四字节。

  • NALU结束是三字节的 0x000000,防止数据中间出现0x000000,中间每遇到两个0x00就插入一个0x03
    -在这里插入图片描述

  • NAL头:8位

    • F(forbiden)禁止位 0:为1时语法错误
    • NRI 参考级别 1-2:值越大,越重要
    • TYPE Nal 单元数据类型 3-7:数据类型
      在这里插入图片描述

参数集

SPS-序列参数集

  • profile信息,baseline,main,extended
  • 码流level,不同的level定义了最大分辨率,最大帧率,最大码率,1080P30FPS20Mbps是 Level4.0
  • 色彩空间
  • 码率控制参数
  • 熵编码参数

PPS-图像参数集

  • 图像类型:IPB
  • 参考帧选择
  • 解码器配置
  • 参数集索引

ES-Elementary Streams(原始流)

  • 包含视频和音频
  • 视频是 NALU
  • 音频则是音频帧
  • 只含视频或音频
  • 由若干个 AU(Access Unit)组成

PES-Packetized Elementary Streams(分组的 ES)

  • ES流经过PES打包器形成的数据流,将ES流分组,打包,加入包头信息

PTS PresentationTime Stamp(显示时间标记)、DTS Decoding Time Stamp(解码时间标记)

  • 打包在PES包头内
  • 解决音视频同步显示
  • 防止解码器输入缓存上溢或下溢
  • 每个 IPB 帧包头都有一个 pts dts
  • B帧可以不标记 dts,因为通常同时参考前后两帧
  • B帧的解码顺序和显示顺序可能不同

PS Program Stream(节目流)

  • 由若干个 PES 包组成
  • 包含同步信息和时钟恢复信息
  • 最多可包含同一时间基准的16个视频PES和32个音频PES包
  • 可变长度的
  • 信道环境较好,传输误码率较低时使用PS码流

TS Transport Stream(传输流)

  • 定长的 TS 包组成 188 字节,或加上16字节的 CRC 校验数据
  • 是对 PES 包的重新封装
  • 信道环境较为恶劣、传输误码率较高时使用TS码流
  • 头 四字节,负载 184字节
  • 在这里插入图片描述

PAT 表,PMT 表

  • 通常只用于数字电视,实际网络传输用不到


网站公告

今日签到

点亮在社区的每一天
去签到