ffmpeg视频编码原理和实战-(4)H264原始码流分析

H.264是一种广泛使用的视频编码标准,它采用一种分层结构,其中最重要的一个层是NAL(网络抽象层)。在H.264编码中,原始码流(bitstream)是由多个NALU(NAL Units)组成的。了解NALU 对于解析和处理H.264视频流非常重要。

NALU(NAL 单元)

NALU 是H.264码流的基本单元,每个NALU包含一个头部和有效载荷。以下是NALU的详细结构和功能:

1. NALU 头部 (Header)

NALU的头部通常由一个字节组成,具体包括以下几个部分:

  • forbidden_​​zero_bit (1 bit):强制为0,如果设置为1,表示码流存在错误。
  • nal_ref_idc (2位) : 指示当前NALU的参考的一部分,数值越大表示的一部分最高。
  • nal_unit_type (5位):指示NALU的类型,不同类型表示不同的语法元素或数据类型。
2. NALU 类型(nal_unit_type)

NALU 类型决定了该单元包含的数据的意义。以下是一些常见的 NALU 类型:

  • 1:非关键帧(Non-IDR切片)
  • 5:关键帧(IDR切片)
  • 6:补充增强信息(SEI,Supplemental Enhancement Information)
  • 7:序列参数集(SPS,Sequence Parameter Set)
  • 8:图像参数集(PPS,Picture Parameter Set)

NALU的封装和传输

H.264 码流的目标是在 NALU 前面设置一个起始码(Start Code),通常是0x000001用来0x00000001标识一个 NALU 的开始。因此,本文对于解析码流中失败的 NALU 非常重要。

示例

下面是一个简单的示例,展示一个包含多个 NALU 的 H.264 码流:

复制代码
... 0x000001 67 ... 0x000001 68 ... 0x000001 65 ...
  • 0x000001表示起始码,用于标识一个新的NALU 的开始
  • 67是序列参数集(SPS)的NALU类型,67(十六进制)转化为二进制是0110 0111,八位NALU头部
  • 68是图像参数集(PPS)的NALU类型
  • 65是关键帧(IDR切片)的NALU类型

总结

NALU 是 H.264 编码标准中的基本单元,包含了视频数据和其他辅助信息。 每个 NALU 由一个头部和有效载荷组成,通过起始码分隔符。在处理 H.264 码流时,解析和理解 NALU 都是关键的步骤

相关推荐
2301_7903559718 小时前
【技术拆解】短视频配音自动化流程:从文案预处理到 SRT 字幕的 9 个环节
自然语言处理·音视频
大飞哥软件自习室1 天前
视频批量截图并自动拼图是怎么做的:从四步向导、三种截帧模式到等距抽样与日志兜底的实现拆解,附 FFmpeg 调用与线程模型说明
ffmpeg·音视频·批量截图
todoitbo2 天前
把 K-Lite「什么都能播」搬上鸿蒙 PC:影匣播放器的 FFmpeg + libass 原生移植实录
华为·ffmpeg·harmonyos·鸿蒙
Black蜡笔小新2 天前
消防控制室/配电房/中控室...视频汇聚平台EasyCVR岗位AI智能监测方案守住关键岗位
大数据·音视频·easycvr
FlightYe2 天前
音视频修炼之容器与协议(四):RTSP详解
android·linux·ffmpeg·音视频·dash
乐橙开放平台3 天前
海康和大华摄像头能统一管理吗?可以通过 GB28181 或视频融合平台接入
网络·后端·物联网·音视频
Mirawork3 天前
Mirawork v0.32.0 更新体验:会话引用、任务分享与音频转写怎么用
人工智能·音视频
熬夜磕代码丶4 天前
RN鸿蒙空间音频实战
华为·音视频·harmonyos
架构师伯子明4 天前
ffmpeg学习4:opencv在音视频领域常用指令
opencv·学习·ffmpeg
Android系统攻城狮5 天前
Linux FFmpeg深度解析之avio_open调用流程与实战(三十八)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频