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

H264: SPS和PPS概念

1. 基本概念

1.1 SPS (Sequence Parameter Set) - 序列参数集

  • 作用: 定义整个视频序列的全局参数
  • 包含信息: 视频分辨率、帧率、编码配置、参考帧数量、色彩空间信息
  • 特点: 在整个视频序列中保持不变

1.2 PPS (Picture Parameter Set) - 图像参数集

  • 作用: 定义图像解码所需的参数
  • 包含信息: 熵编码类型、分片组信息、去块滤波器参数、量化参数
  • 特点: 可能在不同图像间变化

2. 在H.264编码中的作用

  • 解码器初始化: SPS和PPS必须在解码第一帧之前被解析
  • 帧间依赖关系: I帧包含完整参数,P/B帧依赖之前帧的参数
  • 错误恢复: 帮助解码器在传输错误后重新同步

3. MP4格式中的SPS/PPS

  • 存储位置: extradata字段中的AVCDecoderConfigurationRecord结构
  • 特点: 集中存储,便于管理,但extradata丢失会导致整个视频无法解码
  • 数据流: 视频帧本身不包含SPS/PPS,解码器从容器头部获取

4. TS格式中的SPS/PPS

  • 存储位置: 每个关键帧前的NALU流中
  • 特点: 分散存储,容错性强,但数据冗余
  • 数据流: 每个关键帧前都有SPS/PPS,支持随机访问

5. AVCC转流媒体格式

5.1 主要转换内容

  • 从MP4的extradata中提取SPS/PPS参数
  • 将AVCC格式(长度前缀)转换为Annex-B格式(起始码)
  • 在关键帧前插入必要的SPS/PPS信息
  • 确保流媒体传输的容错性和随机访问能力

6. 常见问题

  • "non-existing PPS 0 referenced"错误: 解码器找不到PPS信息
  • 解码失败: SPS/PPS信息不完整或损坏
  • 文件体积过大: 过度插入SPS/PPS

7. 最佳实践

  • 在视频开始前确保SPS/PPS可用
  • 在关键帧前检查是否需要插入
  • 优先从extradata提取SPS/PPS
  • 使用Annex-B格式作为输出

8. 📚 总结

SPS和PPS是H.264编码的核心参数,在不同容器格式中的存储方式影响解码的可靠性和效率:

  • MP4格式: 集中存储,管理方便但容错性差
  • TS格式: 分散存储,容错性强但数据冗余
  • 格式转换: 需要智能地提取和插入SPS/PPS,确保兼容性
http://www.lryc.cn/news/624486.html

相关文章:

  • thinkphp8:一、环境准备
  • Java-101 深入浅出 MySQL InnoDB 锁机制全景图:行锁原理、Next-Key Lock、Gap Lock 详解
  • 机器学习——XGBoost算法
  • python-----机器学习中常用的数据预处理
  • 机器学习之数据预处理(一)
  • 英特尔公司Darren Pulsipher 博士:以架构之力推动政府数字化转型
  • STM32使用WS2812灯环
  • 吴恩达 Machine Learning(Class 2)
  • Windows桌面自动化的革命性突破:深度解析Windows-MCP.Net Desktop模块的技术奥秘
  • 从零到一构建企业级GraphRAG系统:GraphRag.Net深度技术解析
  • OpenCV---特征检测算法(ORB,Oriented FAST and Rotated BRIEF)
  • SkyWalking + Elasticsearch8 容器化部署指南:国内镜像加速与生产级调优
  • 深度解析阿里巴巴国际站商品详情 API:从接口调用到数据结构化处理
  • Vision Master的C#脚本与opencv联合编程
  • 【GM3568JHF】FPGA+ARM异构开发板烧录指南
  • [系统架构设计师]软件可靠性基础知识(九)
  • 蔬菜批发小程序:生产商的数字化转型利器——仙盟创梦IDE
  • 【Linux系统】进程间通信:System V IPC——消息队列和信号量
  • VLN视觉与语言导航(1)——数学与人工智能基础理论
  • 云计算-云上实例部署 RocketChat:Mongodb、主从数据库、Node 环境配置指南
  • 【前端面试题】JavaScript 核心知识点解析(第二十二题到第六十一题)
  • 【运维进阶】部署文件到受管主机
  • Vue2篇——第六章 Vue 路由(VueRouter)全解析
  • 自信息,信息熵,交叉熵,KL散度,JS散度
  • 【自动化测试】Selenium详解-WebUI自动化测试
  • 代理模式深度解析:从静态代理到 Spring AOP 实现
  • MATLAB建模与可视化技术文档:从二维到三维
  • 当使用STL容器去存放数据时,是存放对象合适,还是存放对象指针(对象地址)合适?
  • Centos7使用lamp架构部署wordpress
  • 使用华为显卡训练深度学习模型的步骤