h264编码概述七(SPS解析)

这篇具有很好参考价值的文章主要介绍了h264编码概述七(SPS解析)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概念

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

二、定义

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

h264 sps,h264编码概述,音视频

h264 sps,h264编码概述,音视频

1、profile_idc

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

h264 sps,h264编码概述,音视频

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

profiles profile_idc
baseline profile 66
main profile 77
extended profile 88
High profile 100
High 10 profile 110
High 4:2:2 profile 122
High 10 Intra profile

profile_idc=110 && 

constraint_set3_flag=1  

High 4:2:2 Intra profile profile_idc = 122 && 
constraint_set3_flag = 1 
High 4:4:4 Intra profile profile_idc = 244 &&
constraint_set3_flag =1  
CAVLC 4:4:4 Intra profile 44

2、constraint_set0_flag - constraint_set3_flag

辅助profile_idc确定编码的profiles。

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

h264 sps,h264编码概述,音视频

 3、level_idc

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

h264 sps,h264编码概述,音视频

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

h264 sps,h264编码概述,音视频

 4、seq_parameter_set_id

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

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

h264 sps,h264编码概述,音视频

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

 h264 sps,h264编码概述,音视频

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

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

h264 sps,h264编码概述,音视频

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

h264 sps,h264编码概述,音视频

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

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

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

h264 sps,h264编码概述,音视频

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的值,公式如下: 

h264 sps,h264编码概述,音视频

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

h264 sps,h264编码概述,音视频

  11、pic_height_in_map_units_minus1

h264 sps,h264编码概述,音视频

 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()语法结构。文章来源地址https://www.toymoban.com/news/detail-662907.html

到了这里,关于h264编码概述七(SPS解析)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • H264码流中 SPS PPS SEI 详解

    1 客户端抓包 在做客户端视频解码时,一般都会使用Wireshark抓包工具对接收的H264码流进行分析,如下所示: 在这里我们可以看到对解码视频起关键作用的SPS和PPS。  2、双击SPS内容如下: 那么从上面的sps中我们知道图像的宽,高。 宽=(19+1 )*16=320 高=(14+1)*16=240 SPS语法元

    2023年04月20日
    浏览(49)
  • 音视频知识:MPEG-4、H264、MP4、AAC之间的关系

    MPEG-4 一种编码标准。是国际标准化组织 (ISO) 主要针对消费类应用,已经针对运动图像压缩定义的标准。MPEG(Moving Picture Experts Group)标准包括 MPEG1、MPEG2与 MPEG4。 MPEG-4标准目前分为27个部分,统称为ISO/IEC14496国际标准。其中第10部分(ISO/IEC 14496-10)就是熟悉的高级视频编码

    2024年02月14日
    浏览(65)
  • Linux Qt5.15.2 编译QWebEngine源码支持音视频H264

    默认自带的QWebEngine 因版权问题不支持音视频功能,需要自己编译源码以支持。 平台:Linux(UOS V20 1050) Qt:5.15.2 下载 Qt 5.15.2 对应版本源码,使用镜像网站或者Qt Maintenance Tool工具下载。 配置 Qt 环境变量 将以下内容追加到bashrc文件后 刷新使其生效 这个阶段可以预先安装所

    2024年02月05日
    浏览(61)
  • 音视频八股文(9)-- flv的h264六层结构和aac六层结构

    FLV(Flash Video)是Adobe公司推出的⼀种流媒体格式,由于其封装后的⾳视频⽂件体积⼩、封装简单等特点,⾮常适合于互联⽹上使⽤。⽬前主流的视频⽹站基本都⽀持FLV。采⽤FLV格式封装的⽂件后缀为.flv。 FLV封装格式是由⼀个⽂件头(file header)和 ⽂件体(file Body)组成。其中,FLV

    2024年02月01日
    浏览(64)
  • 音视频开发 RTMP协议发送H.264编码及AAC编码的音视频(C++实现)

    RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系Flash Player和RtmpServer,如 FMS , Red5 , crtmpserver 等。RTMP协议可用于实现直播、点播应用,通过 FMLE(Flash Media Live Encoder) 推送音

    2023年04月08日
    浏览(74)
  • VCC-H266/X265/X264音视频编码开源实现的编译及测试

    下载vs2019 下载链接 Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 下载cmake【非必须,vs2019中带有cmake,但是没有界面】 下载链接 Download | CMake 设置环境变量Path 使用vs2019中内置的cmake,需要先找到C:Program Files (x86)Microsoft Visual Studio2019ProfessionalCommon7IDECommonExtensionsMic

    2024年02月07日
    浏览(54)
  • 视频编码(H264编码)

    基本步骤:    1、打开编码器          2、转换NV12到YUV420,这是因为FFmpeg的x264编码器只支持YUV420          3、准备编码数据AVFrame         创建frame:  创建AVPacket: AVPacket* pck = av_packet_alloc(); 4、H264编码       avcodec_send_frame(#AVCodecContext *avctx#, #const AVFrame *frame#)    

    2024年02月03日
    浏览(44)
  • 从原理到实践:音视频编码与解码技术解析

    1.1 引言 音视频编码与解码技术在现代数字媒体领域中扮演着至关重要的角色。随着互联网和移动设备的快速发展,音视频数据的传输和处理变得越来越普遍和重要。理解音视频编码与解码的原理与实践对于开发高质量、高效率的音视频应用程序至关重要。 1.2 音视频编码与解

    2024年02月03日
    浏览(52)
  • 视频编码流程 YUV数据编码为H264数据

    视频编码时,设置编码器上下文参数有:码率,宽,高,格式,帧率等 frame设置:宽,高,格式 然后计算一帧的数据:宽 * 高 * 格式占用字节数 通常使用av_image_get_buffer_size来计算 av_opt_set就是用来设置参数的 preset preset参数是一个权衡编码速度和压缩率的参数,编码速度越慢,压缩率越高 参数

    2024年02月13日
    浏览(42)
  • 【解决】萤石云接入视频报错视频编码类型非H264

    说在前面 项目视频监控设备接入了萤石云,部分视频无法正常加载,报错页面如下: 原因分析 视频监控视频编码目前有H265和H264两种,萤石云仅支持H264的编码格式,所以对于接入的视频流才会出现这种错误。 解决方案 方案一:如果你能接触到项目部网络,可以参考萤石云

    2024年02月14日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包