首页 > 其他分享 >H264解析

H264解析

时间:2024-10-29 10:30:50浏览次数:1  
标签:编码 00 01 H264 IDR NALU 解析

一、从视频图像角度看:H264->GOP->Frame->Slice->Block

序列 (GOP)图片 (pictrue)片 (Slice)宏块 (Macroblock)子块 (subblock)

GOP(Group of Picture)组成:两个I帧之间的所有帧为一个GOP。1个GOP = 1个I帧 + 若干个B帧 + 若干个P帧

I帧、B帧、P帧

  • I 帧 Intra picture 帧内编码帧。 关键帧,帧内压缩。   I 帧通常是每个 GOP(group of pictures) 的第一个帧;    一个 I 帧可以看成是一张图片经过压缩后的产物;    I 帧本身可以通过视频解压算法解压成一张单独的完整的图片。
  • P 帧 Predicative-frame 向前预测编码帧。  前向预测编码帧,帧间压缩。  P 帧需要参考其前面的1个 I 帧或者 P 帧来生成一张完整的图片。
  • B 帧 Bi-directional interpolated prediction frame 双向预测帧。 双向差别帧,帧间压缩。   B 帧需要参考其前1个 I 或者 P 帧及其后的几个 P 帧来完成一张完整的图片。

IDR帧:(Instantaneous Decoding Refresh,即时解码刷新)
  IDR帧特殊的I帧。当解码器遇到IDR帧就会清空参考队列,将已解码的数据全部输出或抛弃,开始解码新的序列。而普通的I帧不会清理参考队列,也就是说IDR可以阻断误差的累计,而普通I帧不行。

 

二、从数据角度看 H264-> 若干个[ StartCode ] + [ NALU Header ] + [ NALU Payload ]循环

H.264 原始码流(裸流)是由⼀个接⼀个 NALU 组成,NALU 的功能分为 2 层:
  VCL (视频编码层): 包括核心压缩引擎和块,宏块和片的语法级别定义,设计目标是尽可能地独立于网络进行高效的编码;
  NAL (网络提取层): 负责将 VCL 产生的比特字符串适配到各种各样的网络和多元环境中,覆盖了所有片级以上的语法级别。
  原始 NALU 单元 = [ StartCode ] + [ NALU Header ] + [ NALU Payload ]

 H264码流是一个个连续的NALU,一个NALU包含 [NALU Header][NALU Payload (RBSP)] 三部分

StartCode:是一个NALU单元开始。主要是为了将相邻两个NALU划分开,让他们有一个界线,方便解码。必须是 0x00 00 00 01 或者0x00 00 01。

 NAL header:定义了RBSP(payload)单元的类型。由 1字节(8位)组成。禁止位(1位)、重要性指示位(2位)、NALU类型(5位)

 SPS(Sequence Paramter Set,序列参数集)SPS 中保存了一组编码视频序列的全局参数。pps主要包含熵编码类型、基础QP和最大参考帧数量等基本的编码信息
PPS(Picture Paramter Set,图像参数集)对应的是一个序列中某一幅图像或者某几幅图像的参数。sps主要包含图像的宽、高、YUV格式和位深等基本的信息
如果没有pps和sps中包含的基础信息,之后的I帧P帧和B帧就无法进行解码。传输 H264 原始码流(裸流)过程中,在发送 I 帧之前,至少要 先发一次 SPS 和 PPS。

h264常见的帧头数据为:
00 00 00 01 67 (SPS)
00 00 00 01 68 (PPS)
00 00 00 01 65 (IDR帧)
00 00 00 01 61 (非IDR帧)
00 00 00 01 06 (SEI)

NALU Header 常见的取值:0x67 0x68 0x65 0x61,0x47 0x48 0x45 0x41,0x27 0x28 0x25 0x21
NALU header 描述
0x67,0x47,0x27 SPS, 序列参数集,重要级别分别为11、10、01
0x68,0x48,0x28 PPS, 图像参数集,重要级别分别为11、10、01
0x65,0x45,0x25 IDR帧,重要级别分别为 11、10、01
0x61,0x41,0x21 非IDR帧,重要级别分别为 11、10、01

00 00 00 01 06 这是SEI数据,是视频的附加信息,包含了用户的自定义信息,比如时间戳,字幕和弹幕信息等。SEI信息一般放在编码图像之前,很多时候SEI是可以忽略的
00 00 00 01 67 这是SPS数据,这指的是序列参数集,它保存了一组编码视频序列的全局参数。编码视频序列指的是原始数据经过编码后组成的一系列序列集。
00 00 00 01 68 PPS数据,这指的是图像的参数集,主要用于保存图像序列集中一个或多个独立的图像,一般情况下,配合SPS和PPS都是H264开头的两个NALU头。
00 00 00 01 65 IDR数据,IDR指的是H264一帧完整的图像数据,也就是常说的关键帧。
00 00 00 01 61 (非IDR帧),普通I帧、B帧、P帧
所以一个标准的H264码流结构一般是:{SEI+SPS+PPS+IDR+非IDR}循环

winhex打开海思开发板保存的H264文件

 

标签:编码,00,01,H264,IDR,NALU,解析
From: https://www.cnblogs.com/ordinary-world/p/18512436

相关文章

  • GaussDB SQL查询语句执行过程解析
    ​前沿SQL于关系型数据库而言,重要性不言而喻。就像一个乐团的指挥,指导着作品的正确演绎和节奏的和谐统一。华为云GaussDB作为新一代关系型分布式数据库,具备卓越的技术性能和行业竞争力。很多人对GaussDB的关键技术很好奇:GaussDBSQL语句到底是如何执行的?GaussDBSQL引擎原理是......
  • GaussDB云原生数据库SQL引擎继承原来openGauss的词法解析,语法解析,查询重写,查询优化和
    云原生数据库SQL引擎继承原来openGauss的词法解析,语法解析,查询重写,查询优化和执行引擎的能力。由于云原生数据库是shareddisk架构,一个事务在一个节点上执行,所以不需要原来分布式根据分布式key进行数据分布,分布式执行和分布式2PC提交的能力。为了支持数据库粒度的异地多活,云原生......
  • SpringBoot 日志深度解析:轻松上手,快速精通!
    前言日志,是开发中熟悉又陌生的伙伴,熟悉是因为我们经常会在各种场合打印日志,陌生是因为大部分时候我们都不太关心日志是怎么打印出来的,因为打印一条日志,在我们看来是一件太平常不过的事情了,特别是在宇宙第一框架Springboot的加持下,日志打印是怎么工作的就更没人关注了。但是了......
  • 大华设备视频平台EasyCVR私有化视频平台云端录像、监控存储、回看、计划与配置功能全
    EasyCVR是TSINGSEE青犀视频在音视频流媒体技术和人工智能领域的深入研发成果,它以出色的视频处理、汇聚和融合能力,在构建视频监控系统方面表现出独特的优势。大华设备视频平台EasyCVR能够接入高清网络摄像机的RTSP直播流,并且支持多种其他直播流格式,例如RTMP、HTTP-FLV、HLS(M3U8)......
  • 大华设备视频平台EasyCVR私有化视频平台云端录像、监控存储、回看、计划与配置功能全
    EasyCVR是TSINGSEE青犀视频在音视频流媒体技术和人工智能领域的深入研发成果,它以出色的视频处理、汇聚和融合能力,在构建视频监控系统方面表现出独特的优势。大华设备视频平台EasyCVR能够接入高清网络摄像机的RTSP直播流,并且支持多种其他直播流格式,例如RTMP、HTTP-FLV、HLS(M3U8)......
  • 2024CSP-J 普及组第二轮试题及解析(第三题、小木棍(sticks))
    第三题参考程序代码:#include<iostream>usingnamespacestd;voidsolve(){ intn; cin>>n;//特殊情况处理 if(n==1) { cout<<-1<<endl;return; } elseif(n==2) { cout<<1<<endl; return; } elseif(n==3) { cout<&l......
  • 使用php解析企业微信消息wxwork_finance_sdk扩展安装
    安装参考如果你是用docker环境,请查看GitHub-oh-stone/wework-chatdata-sdk:微信SDK打包非docker环境安装:GitHub-pangdahua/php7-wxwork-finance-sdk:PHP企业微信会话存档扩展liunx为php7.4安装wxwork_finance_sdk扩展1.例如我们使用宝塔环境,php安装路径为:/www/......
  • 名城优企游学活动之走进思腾合力:解析人工智能先行者的数字化之路
    近日,以“数字中国·高效增长”为主题的名城优企游学系列之走进思腾合力活动圆满落幕,此次活动吸引了众多业内精英的关注及参与,现场气氛热烈,与会嘉宾深入探讨企业数字化、智能化转型发展的创新路径及发展策略。 01、人工智能先行者持续领先的管理之道会上,思腾合力市场营销中心总......
  • PbootCMS 升级后网站打不开,解析错误 Parse error: syntax error, unexpected ‘:’, e
    PbootCMS升级后网站打不开,解析错误 Parseerror:syntaxerror,unexpected‘:’,expecting‘{’根据你提供的信息,PbootCMS升级后网站无法打开,并且出现了解析错误 Parseerror:syntaxerror,unexpected‘:’,expecting‘{’in/www/wwwroot/****/core/function/help......
  • DRF-Parser解析器组件源码分析和应用
    1.解析器源码分析注意:以下源码为了方便理解已进行简化,只保留了解析器相关的代码#视图函数:classMyView(APIView):defpost(self,request):print(self.request.data)#触发解析流程returnResponse("ok")解析并获取数据的源码分析:获取解析器的......