h264编码之SPS解析

news2024/9/20 14:38:03

一、概念

SPS即Sequence Paramater Set,又称作序列参数集。SPS中保存了一组编码视频序列(Coded video sequence)的全局参数。

二、定义

H.264标准协议中规定的SPS格式位于文档的7.3.2.1.1,如下图所示:

1、profile_idc

根据《T-REC-H.264-201402-I!!PDF-E》的附件A.2定义,profiles有如下类型:

profile_idc的值用来确定码流符合哪一种档次。根据Annex A协议定义,整理表格如下:

profilesprofile_idc
baseline profile66
main profile77
extended profile88
High profile100
High 10 profile110
High 4:2:2 profile122
High 10 Intra profile

profile_idc=110 && 

constraint_set3_flag=1  

High 4:2:2 Intra profileprofile_idc = 122 && 
constraint_set3_flag = 1 
High 4:4:4 Intra profileprofile_idc = 244 &&
constraint_set3_flag =1  
CAVLC 4:4:4 Intra profile44

2、constraint_set0_flag - constraint_set3_flag

辅助profile_idc确定编码的profiles。

constraint_set0_flag 等于1是指比特流遵从A.2.1节中的所有规定。constraint_set0_flag 等于0是指该比特流可以遵从也可以不遵从A.2.1节中的所有规定。

 3、level_idc

标识当前码流的Level。编码的Level定义了某种条件下的最大视频分辨率、最大视频帧率等参数,码流所遵从的level由level_idc指定。

例如码流中,level_idc = 0x29 = 41,因此码流的级别为4.1。 

 

 

 4、seq_parameter_set_id

用于识别图像参数集所指的序列参数集。seq_parameter_set_id值在0-31的范围内,包括0和31。

使用无符号整数指数哥伦布码编码的语法元素(具体方法需参见9.1指数哥伦布编码的解析过程)与Slice head的pic_parameter_set_id对应。

 我们使用ffmpeg进行解析的时候,经常碰到non-existing SPS/PPS,如下打印:

 

 实际上就是GOP的SPS和PPS丢失,再解析视频帧,报的无法解析错误。ffmpeg代码分析如下:

ff_h264_decode_seq_parameter_set、ff_h264_decode_picture_parameter_set会读取sps_id、pps_id。申请对应缓存

 然后h264_slice_header_parse解析视频帧时,会判断该缓存是否正常申请:

没有正常申请,说明SPS、PPS丢失,无法正常解码,丢失该帧。 

5、log2_max_frame_num_minus4 取值范围0-12,包括0和12

按照如下公式可得出与frame_num相关的变量MaxFrameNum的值:

 

6、pic_order_cnt_type

是指解码图像顺序picture order count(POC)的计数方法(如 8.2.1 节所述)。POC是另一种计量图像序号的方式,与frame_num有着不同的计算方法。该语法元素的取值为0、1或2。

7、log2_max_pic_order_cnt_lsb_minus4

表示用于8.2.1节规定的图像顺序数解码过程中的变量MaxPicOrderCntLsb的值,公式如下: 

8、num_ref_frames

num_ref_frames规定了可能在视频序列中任何图像帧间预测的解码过程中用到的短期参考帧和长期参考帧、互补参考场对以及不成对的参考场的最大数量。num_ref_frames 字段也决定了 8.2.5.3 节规定的滑动窗口操作的大小。num_ref_frames 的取值范围应该在 0 到 MaxDpbSize (参见 A.3.1 或 A.3.2 节的定义)范围内,包括 0 和MaxDpbSize。

9、gaps_in_frame_num_value_allowed_flag

gaps_in_frame_num_value_allowed_flag 表示 7.4.3 节给出的 frame_num 的允许值以及在 8.2.5.2 节给出的frame_num 值之间存在推测的差异的情况下进行的解码过程。

10、pic_width_in_mbs_minus1

  11、pic_height_in_map_units_minus1

 12、frame_mbs_only_flag

frame_mbs_only_flag=0:表示编码视频序列的编码图像可能是编码场或编码帧。frame_mbs_only_flag=1:表示编码视频序列的每个编码图像都是一个仅包含帧宏块的编码帧。 

13、direct_8x8_inference_flag

direct_8x8_inference_flag表示在8.4.1.2节中规定的B_Skip、B_Direct_16x16和B_Direct_8x8亮度运动矢量的计算过程使用的方法。当frame_mbs_only_flag等于0时direct_8x8_inference_flag应等于1。

14、frame_cropping_flag

frame_cropping_flag=1:表示帧剪切偏移参数遵从视频序列参数集中的下一个值。frame_cropping_flag=0:表示不存在帧剪切偏移参数。 

15、vui_parameters_present_flag

vui_parameters_present_flag=1:表示存在如附录E提到的vui_parameters()语法结构。
vui_parameters_present_flag=0:表示不存在如附录E提到的vui_parameters()语法结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/393594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库的备份与恢复

文章目录前言备份恢复概述故障的种类数据库备份数据库的恢复日志文件前言 提示:这里可以添加本文要记录的大概内容: 备份与恢复是为了防止数据库运行出现故障时造成数据丢失、损坏的一个重要手段 提示:以下是本篇文章正文内容,…

【SAP PO】X-DOC:SAP PO 接口配置完整教程之三REST服务发布报文转换

X-DOC:SAP PO 接口配置完整教程之三REST服务发布&报文转换1、SAP端RFC开发2、PO端接口配置2.1、PO端SLD配置2.2、PO端ESB配置2.3、PO端IB配置2.4、Postman测试3、报文转换配置1、SAP端RFC开发 开发一个支持远程访问的RFC: FUNCTION yfm_xl_rest_de…

水库大坝安全监测及水情自动测报系统(设备清单)

解决方案水库大坝安全监测及水情自动测报系统方案,系统主要由降雨量监测站、水库水位监测站、大坝安全监测中的渗流量、渗流压力和变形监测站及视频和图像监测站等站点组成,同时建立规范、统一的监测平台,集数据传输、信息共享、数据储存于一…

springBoot健康检查与k8s探针

从springBoot健康检查到k8s探针的问题定位 环境: k8s、springboot、mysql、flyway、Spring boot 2.0 Actuator健康检查组件等 问题: 项目中集成了flyway,当项目第一次启动时,都会初始化flyway文件,再加上各种组件的…

水文模型有哪些?SWAT模型、VIC模型、HEC模型、HSPF模型、HYPE模型、SWMM模型、FVCOM模型、Delft3D模型等应用

目录 ㈠ 从小白到精通SWAT模型学习建模方法、实例应用、高级进阶 ㈡ RVIC模型融合实践技术应用及未来气候变化模型预测 ㈢ HEC-RAS一维、二维建模方法及实践技术应用 ㈣ HEC-HMS水文模型实践技术应用 ㈤ HSPF 模型应用 ㈥ HYPE分布式水文模型建模方法与案例分析 ㈦ 基于…

raspberry安装ffmpeg以及扩展了解

文章目录ffmpeg简介使用ffmpegffplay播放控制命令播放滤镜处理参数选项ffprobeffmpeg sudo apt-get install ffmpeg简介 FFmpeg的名称来自MPEG视频编码标准,前面的“FF”代表“Fast Forward”,FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0…

Godot Engine 4.0横空出世,Vulkan大怪兽加持,画质提升简直亮瞎眼

【CSDN 编者按】经历了漫长的等待,万众瞩目的 Godot Engine 4.0 正式版在其 3.0 版本发布 5 年以后,终于带着海量令人兴奋的新功能横空出世! 整理 | 开发游戏的老王 责编 | 王子彧 出品 | CSDN(ID:CSDNnews&#xff09…

优思学院|盘点,精益生产25个工具!【必需收藏】

精益生产方法需要一种全面的方法才能有效实施。精益这个概念是每个接触产品供应链的人都要实践的,无论是在计划方面还是在分析方面。 精益生产工具有助于持续改进生产效率和产品或服务质量。精益工具是要减少 Muda (浪费),从生产过…

内存清理、动画制作、CPU检测等五款实用软件推荐

人类与99%的动物之间最大差别在于是否会运用工具,借助好的工具,能提升几倍的工作效率。 1.内存清理软件——MemReduct MemReduct是一款内存清理软件,现在越来越多的软件由于硬件的普遍发展,对内存的使用都开始肆无忌惮起来&…

【C++】list的使用和基本迭代器框架的实现 vs和g++下string结构的说明

真正的成熟应该并不是追求完美,而是直面自己的缺憾,这才是生活的本质。 文章目录一、初见list1.list的迭代器失效和基本使用2.list的operations操作接口(看起来挺不错的接口,但可惜不怎么实用)3.vector和list的排序性能…

Linux系统基础命令(二)

一、浏览和切换目录 ls命令:列出文件和目录,主要用于列出文件和目录 CentOS的终端默认是有颜色标注的。一般来说:蓝色--->目录;绿色-->可执行文件;红色--->压缩文件;浅蓝色--->链接文件&#…

Java并发类库提供的线程池有哪几种? 分别有什么特点?

第21讲 | Java并发类库提供的线程池有哪几种? 分别有什么特点? 我在专栏第 17 讲中介绍过线程是不能够重复启动的,创建或销毁线程存在一定的开销,所以利用线程池技术来提高系统资源利用效率,并简化线程管理&#xff0c…

计算机网络总结

第一章 互联网 互连网:局部范围互连起来的计算机网络,与网络相连的计算机常称为主机。 互联网:当今世界上最大的计算机网络,Internet 两个基本特点 连通性,资源共享(信息,软件,硬件) 计算…

Ubuntu18安装新版本PCL-1.13,并和ROS自带PCL-1.8共存

文章目录1.安装新版本PCL-1.132.在工程中使用新版本的PCL-1.133.pcl-1.13误装到/usr/local/下如何卸载1.安装新版本PCL-1.13 下载PCL-1.13代码: 修改CMakeLists.txt文件,不编译vtk相关的代码:vtk的问题比较难解决,但是一般我们安…

科技大势怎么看 2023怎么干?

2023年,科技的走向依旧是世界各国的关注重点,各国在纷纷设立自己的科技战略目标外,还在潜心研究不同技术领域的科技趋势,试图通过科技占据国际竞争的制高点。 随着我国深入实施创新驱动发展战略,推动产业结构优化升级&…

数据结构1——概念与程序复杂度

翻陈年老底翻到了之前的数据结构笔记,由于当时刚开始使用电脑记笔记,markdown语法用的还是不是很熟,以及技术上比较欠缺,望多多海涵。 来都来了,点个赞呗~ 数据结构大体框架 早期>>数值计算>>计算机元素…

配置主机名与ip的映射关系

本次进行简单的小实验 通过在windows上配置主机名与IP地址的映射关系,达到我们在xshell或其他远程连接设备上,不用IP地址登陆,只需要用主机名就能实现登陆的效果 配置 首先 需要查看自己虚拟机的IP地址,找到ens33或者ens160…

[项目] Boost搜索引擎

目录 1.项目相关背景 2.项目宏观原理 3.技术栈和项目环境 4.正排索引&&倒排索引 5.去标签与数据清洗 6.构建索引模块Index 6.1正排索引 6.2 建立倒排 jiebacpp使用 建立分词 7.搜索引擎模块Searcher Jsoncpp -- 通过jsoncpp进行序列化和反序列化 处理Cont…

Vscode中Vue文件保存格式化、 ElementUI、Font Awesome俩大插件使用

Vscode中Vue文件老一片红色出现格式错误??如何运行别人的项目(没有node_modules文件)??选用组件与图标?? 解决问题一 前提有:Prettier ESLint插件、ESLint插件 1.打开s…

Git图解-常用命令操作-可视化

目录 一、前言 二、初始化仓库 2.1 设置用户名与邮箱 2.2 初始化仓库 三、添加文件 四、查看文件状态 五、查看提交日志 六、查看差异 七、版本回退 八、删除文件 九、分支管理 9.1 创建分支 9.2 切换分支 9.3 查看分支 9.4 合并分支 十、文件冲突 十一、转视…