当前位置: 首页 > news >正文

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

编码层次

  • 视频编码层:预测、变换、量化、熵编码等操作
  • 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 表

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

相关文章:

  • 第十四届蓝桥杯大赛B组 JAVA 蜗牛 (递归剪枝)
  • 模版进阶C++
  • AI写的wordpress网站首页模板 你觉得怎么样?
  • [GXYCTF2019]BabyUpload1 -- 题目分析与详解
  • 探讨苹果 Vision Pro 的 AI 数字人形象问题
  • Linux相关小技巧《一》
  • LeetCode每日一题之 移动0
  • C++之结构体以及通讯录管理系统
  • 第四十七回 一丈青单捉王矮虎 宋公明二打祝家庄-强大而灵活的python装饰器
  • 在git中自动把CRLF转换到LF的方法
  • iOS-UILabel调整行间距
  • RK3568开发笔记-qt程序运行报错Failed to move cursor on screen
  • 100243. 将元素分配到两个数组中 I
  • 经典的算法面试题(1)
  • C++从零开始的打怪升级之路(day41)
  • [iOS]Core Data浅析一 -- 启用Core Data
  • “大数据应用场景”之隔壁老王(连载四)
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • Bootstrap JS插件Alert源码分析
  • C++类中的特殊成员函数
  • IndexedDB
  • Java|序列化异常StreamCorruptedException的解决方法
  • javascript 哈希表
  • Java到底能干嘛?
  • Js基础知识(四) - js运行原理与机制
  • mysql innodb 索引使用指南
  • PHP CLI应用的调试原理
  • Promise面试题2实现异步串行执行
  • Redis中的lru算法实现
  • RxJS: 简单入门
  • SpiderData 2019年2月23日 DApp数据排行榜
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 给Prometheus造假数据的方法
  • 工作手记之html2canvas使用概述
  • 如何在GitHub上创建个人博客
  • 少走弯路,给Java 1~5 年程序员的建议
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • 选择阿里云数据库HBase版十大理由
  • #数学建模# 线性规划问题的Matlab求解
  • (07)Hive——窗口函数详解
  • (11)MSP430F5529 定时器B
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (一)Neo4j下载安装以及初次使用
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)LINQ之路
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .cn根服务器被攻击之后
  • .Net Core 中间件验签
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...