H.264——NAL Unit结构分析

article/2025/9/28 0:12:51

目录

  • NAL Unit格式
  • NAL Header
    • nal_unit_type
  • NAL Body
    • Extended Byte String Payload
  • RBSP和SODB
    • **问:RBSP是不是等同于原始语法元素值本身?**
    • SODB:String Of Data Bits
  • 结构关系

在这里插入图片描述

NAL Unit格式

在这里插入图片描述
这一部分在h.264标准文档的7.3节。

在这里插入图片描述
解释部分在h264标准文档的7.4.1节
在这里插入图片描述

NAL Header

   +---------------+|0|1|2|3|4|5|6|7|+-+-+-+-+-+-+-+-+|F|NRI|   Type  |+---------------+
  • //F: 1个比特.
    forbidden_zero_bit. 在 H.264 规范中规定了这一位必须为 0.

  • //NRI: 2个比特.
    nal_ref_idc. 取00~11,似乎指示这个NALU的重要性,如00的NALU解码器可以丢弃它而不影响图像的回放,11表示其可能有SPS、PPS和作为参考帧的slice等等比较重要的数据.
    比如在网传的时候,如果网络卡,那么就需要适当丢掉一些数据,丢掉哪些数据就是根据重要性来进行选择

  • //Type: 5个比特.
    nal_unit_type. 这个NALU单元的类型.简述如下:

 - - 0  没有定义- - 1-23 NAL单元 单个 NAL 单元包- - 24  STAP-A  单一时间的组合- - 25  STAP-B 单一时间的组包 - - 26  MTAP16  多个时间的合包- - 27  MTPA24  多个事件组合包- - 28  FU-A	 一帧单包传输- - 29  FU-B    一帧分多包传输 - - 30-31  	 没有定义
h264仅用1-23,24以后的用在RTP H264负载类型头中

nal_unit_type

在h264标准文档的表7-1
在这里插入图片描述

  • 0是没有定义的
  • 7——该NALU承载SPS序列参数集
  • 8——该NALU承载PPS图像参数集

通过这个方式,我们只需要读取NAL包的第一个单元,就能知道这个NALU包含的是什么,并且能针对不同内容对其进行解析或解码

NAL Body

在这里插入图片描述

Extended Byte String Payload

在这里插入图片描述
可以在h264标准文档中看到
在这里插入图片描述

  • 若内部的连续4个字节数据出现了以下情况时
- 0x 00 00 00
- 0x 00 00 01
- 0x 00 00 02
- 0x 00 00 03
  • 在两个0字节之后会插入值为3的一个字节:
- 0x 00 00 03 00
- 0x 00 00 03 01
- 0x 00 00 03 02
- 0x 00 00 03 03

防止NAL内部出现和起始码一样的冲突

在00后面插入一个03,形成的就是Extended Byte String Payload
如果需要对其解析,需要将03去除后进行解析。

RBSP和SODB

在这里插入图片描述
RBSP是去掉03后的数据

问:RBSP是不是等同于原始语法元素值本身?

有时候并不是如此。语法元素进行编码后,并不是按照每个byte对其,可能最后在整数个字节后余下3、4、5个bit的空余;而RBSP(Raw Byte Sequence Payload)有个字是byte,也就是说这里面的数据是按照字节来对齐的
。因此在希望得到这样的数据的时候,需要在原始语法元素的码流后面添加一个rbsp_trailing_bits,作用是实现字节的对其。
rbsp_trailing_bits包含一个固定的1bitt和若干个0bit,0的数量直到实现字节对其为止。

---xxx|10|100000|
---------|rtb   |

NAL Unit是紧密传输的,若一个NALU没有对齐,后面的NALU都不会对齐。所以需要时时刻刻进行对齐,在比特位进行比对的操作,但这样对接收端和解码端造成极大的负担。所以在RBSP这一层添加了字节对齐的功能。

SODB:String Of Data Bits

实际h264语法元素编码后的二进制码流(不保证对齐),即编码后的视频流
大多数情况会有空余,所以需要逐层向上封装,形成NALU这样的结构

结构关系

RBSP + RBSP trailing bits + SODE = RBSP
NAL header(1byte) + RBSP = NALU


http://chatgpt.dhexx.cn/article/pI10ihbm.shtml

相关文章

h264码流及h265码流结构分析,NAL头类型分析

视频编码标准规定了编码后码流的语法语义,也就阐明了从比特流提取语法元素并进行解释的方法,也就是视频的解码过程。 1.h264码流结构解析: H.264/AVC(Advanced Video Coding) 的功能分为两层:视频编码…

H264/AVC NAL单元和解码

在264中,NAL是以NALU(NAL unit)为单元来支持编码数据在基于包交换技术网络中的传输的;它定义了符合传输层或存储介质需求的数据格式,同时提供头信息,从而提供了视频编码与外部世界的接口。网络层和传输层的…

获取NAL_UNIT的RBSP数据

从NAL UNIT中对rbsp获取的原理如图所示&#xff0c;此为NAL UNIT解析的架构图 头文件 #ifndef __NAL_UNIT_H__ #define __NAL_UNIT_H__#include <stdio.h>typedef struct Nal_Unit_Fops {int (*find_nal_unit_data)(FILE *file);int (*find_nal_unit_head)(char (*Q…

H.264——解析NAL Unit数据

目录 原理分析代码实现.c.h 效果 原理 视频编解码——NAL Unit结构分析 分析 1、首先去掉起始码得到NALU实际数据2、分离出NALU中一个字节的header 1bit禁止位、2bitNRI、5bitTYPE 3、解析剩余NALU的body部分 EBSP去除03->RBSP 代码实现 .c #include "LUX_TEST_…

H265/HEVC编码NAL的单元的介绍

一、引言 与H.264/AVC 类似&#xff0c;H265/HEVC也采用视频编码层&#xff08;Video Coding Layer&#xff0c;VCL&#xff09;和网络适配层&#xff08;Network Abstract Layer, NAL&#xff09;的双层结构&#xff0c;以适应不同网络环境和视频应用。网络适配层的主要任务是…

六、NAL Unit解析

参考标准文档&#xff1a;7.3和7.4节 一、NAL Unit结构 NAL Unit: NAL Unit NAL Header NAL Body NAL Header&#xff1a;一个字节&#xff0c;包括&#xff1a; forbidden_zero_bit&#xff1a;规定必须为0禁止位&#xff0c;1 bit;nal_ref_idc&#xff1a;第2和3位&#…

VCL和NAL

VCL和NAL 1.VCL只关心编码部分,重点在于编码算法以及特定硬件平台的实现,VCL输出的是编码后的纯视频流信息,没有任何冗余头信息。 NAL关心是是VCL的输出纯视频流如何被表达和封包以利于网络传输。 封包目的别人知道怎么传输和解码 (1)SODB:string of Data Bits (2)RBSP…

h264 NAL解析

目录 1 AVCC与Annex-B标准 2 slice 2.1 slice header 3 elecard工具解析示例 H.264标准中&#xff0c;视频流是由NAL(Network Abstraction Layer)单元组成的&#xff08;简称NALU&#xff09;&#xff0c;每个NALU中可能是IDR图像、SPS、PPS、non-IDR图像等。 1 AVCC与Ann…

H264(NAL简介与I帧判断)

http://blog.csdn.net/jefry_xdz/article/details/8461343 1、NAL全称Network Abstract Layer, 即网络抽象层。 在H.264/AVC视频编码标准中&#xff0c;整个系统框架被分为了两个层面&#xff1a;视频编码层面&#xff08;VCL&#xff09;和网络抽象层面&#xff08;NA…

H.264(NAL简介与I帧判断)

H.264(NAL简介与I帧判断) 1、NAL全称Network Abstract Layer, 即网络抽象层。 在H.264/AVC视频编码标准中&#xff0c;整个系统框架被分为了两个层面&#xff1a;视频编码层面&#xff08;VCL&#xff09;和网络抽象层面&#xff08;NAL&#xff09;。其中&#xff0c;前者负责…

NAL(网络自适应层)

&#xff08;1&#xff09;整个系统框架被分为了两个层面&#xff1a;视频编码层面&#xff08;VCL&#xff09;和网络抽象层面&#xff08;NAL&#xff09;。其中&#xff0c;前者负责有效表示视频数据的内容&#xff0c;而后者则负责格式化数据并提供头信息&#xff0c;以保证…

H264的NAL解析

一、NAL全称Network Abstract Layer, 即网络抽象层。 在H.264/AVC视频编码标准中&#xff0c;整个系统框架被分为了两个层面&#xff1a;视频编码层面&#xff08;VCL&#xff09;和网络抽象层面&#xff08;NAL&#xff09;。其中&#xff0c;前者负责有效表示视频数据的内容&…

【Lua】xLua逻辑热更新

1 前言 Lua基础语法 中系统介绍了 Lua 的语法体系&#xff0c;ToLua逻辑热更新 中介绍了 ToLua 的应用&#xff0c;本文将进一步介绍 Unity3D 中基于 xLua 实现逻辑热更新。 逻辑热更新是指&#xff1a;在保持程序正常运行的情况下&#xff0c;在后台修改代码逻辑&#xff0c;修…

[Unity实战]一个好用的lua/xlua/tolua/slua调试工具vscode-luaide-lite插件 好用到飞起..[Unity-Debug+Xlua-Debug][开箱可用]

[Unity实战]一个好用的lua调试工具vscode-luaide-lite插件 好用到飞起..[Debug][开箱可用][xlua] 简介官方例子:xlua/tolua/slua/lua5.1等1.安装2.配置3.使用3.1启动unity3.2vscode-debug:Unity Editor3.3vscode-debug:3.4运行unity进入断点... 4.核心代码:5.github地址 简介 l…

XLua——热更新

什么是热更新&#xff1f; 游戏上线后&#xff0c;出现游戏Bug或者需要更新小版本内容&#xff0c;游戏如果没有做热更新支持的话&#xff0c;就需要重重新打包游戏&#xff0c;然后上传平台进行审核&#xff0c;审核通过后玩家才可以下载新版本。审核期间需要时间&#xff0c;…

通过Xlua插件运行lua程序

using System.Collections; using System.Collections.Generic; using UnityEngine; using XLua; //引入xlua命名空间 public class Creat : MonoBehaviour {private LuaEnv luaenv;void Start(){luaenv new LuaEnv(); //LuaEnv可以理解为lua的运行环境luaenv.DoString("…

xlua基础知识

1.1 xLua简介 xLua是由腾讯维护的一个开源项目&#xff0c;xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力&#xff0c;借助xLua&#xff0c;这些Lua代码可以方便的和C#相互调用。自2016年初推广以来&#xff0c;已经应用于十多款腾讯自研游戏&#xff0c;因其良好性…

[Unity XLua]热更新XLua入门(一)-基础篇

无意中发现了一个巨牛巨牛的人工智能教程&#xff0c;忍不住分享一下给大家。教程不仅是零基础&#xff0c;通俗易懂&#xff0c;小白也能学&#xff0c;而且非常风趣幽默&#xff0c;还时不时有内涵段子&#xff0c;像看小说一样&#xff0c;哈哈&#xff5e;我正在学习中&…

Xlua

有一个项目做完快上线了,不是lua写的,能热更新的东西就特别少,如果遇到bug也很难在第一时间热修复,所以我就接入了Xlua这个插件点击打开链接 原本只是想热修复一下的,后来领导要求把逻辑系统的C#代码全部换成了Lua,至于为什么,因为他们习惯了每天都更新和修改的开发模式...所以…

xLua热更新(二)实现热更新

一、环境配置 要实现热更新功能&#xff0c;我们首先需要开启热更新的宏。操作方法是在「File->Build Settings->Player Settings->Player->Other Settings->Scripting Define Symbols」选项中添加HOTFIX_ENABLE 开启后&#xff0c;在xLua的菜单中就出现了「…