美文网首页
音视频数据处理(二)-H265/HEVC视频码流分析

音视频数据处理(二)-H265/HEVC视频码流分析

作者: 码农修仙 | 来源:发表于2021-01-28 14:00 被阅读0次

一、H265概述

H265/HEVC(Hight Efficiency Video Coding)是由ITU-T和ISO/IEC两大组织在H264/AVC的基础之上推出的新一代高效视频编码标准,主要为应对高清和超高清视频在网络传输和数据存储方面带来的挑战。上一篇文章对H264/AVC视频码流进行了详细的分析,本文继续从数据处理的角度对H265/HEVC视频码流进行详细分析。

二、H265分层结构

H265的分层结构与H264类似,分为视频编码层(VCL:Video Code Layer)和网络抽象层(NAL:Network Abstract Layer)。

VCL层:对视频的原始数据进行压缩,包含原始的视频数据。

NAL层:将视频压缩数据根据内容不同划分成不同类型的NALU单元进行网络传输。

三、H265码流结构

H265原始码流(裸流)是由多个NAL单元组成的,具体如下图所示:

...... NALU NALU NALU ......

NALU单元是由什么组成的呢?和H264的NALU单元组成一样,主要由三部分组成,具体如下图所示:

Start Code NALU Header NALU Payload

1.Start Code

Start Code,即开始码,一般为4字节或3字节,必须是“0x00 0x00 0x00 0x01”或“0x00 0x00 0x01”,用来表示一个NALU单元的开始。

2.NALU Header

NALU Header,占2个字节,由forbidden_bit(1bit),nal_unit_type(6bits),nuh_layer_id(6bit),nuh_temporal_id_plus1(3bit)四部分组成,具体如下图所示:


NALU header.png

(1)forbidden_bit(1bit)

F禁止位,占用NALU Header的第一个字节的第一个位,值默认0,值为1时表示错误,当网络发现NAL单元有比特错误时可设置该比特为1,以便接收方纠错或丢掉该单元。

(2)nal_unit_type(6bits)

Type类型,占用NALU Header的第一个字节的第二到七位,用来表示NAL单元的类型,具体取值如下图所示:


H265-NALU-Type.png

(3)nuh_layer_id(6bit)

LayerId预留位,占用NALU Header的第一个字节的最后一位和第二个字节的前五位,默认全为0,用于未来扩展。

(4)nuh_temporal_id_plus1(3bit)

TID时域层标号,占用NALU Header的第二个字节的最后三位,一般默认值为1,其值减1为该NALU时域层标号。

3.NALU Payload

NALU Payload,即视频压缩数据RBSP,但是严格意义上来说,Payload数据应该是EBSP,接下来详细介绍一下H265码流数据中的相关概念,与H264类似。

SODB(String Of Data Bits):原始数据比特流

由VCL层产生的的原始数据流,由于数据长度不一定是8的倍数,为方便计算机进行处理,就用到了RBSP。

RBSP(Raw Byte Sequence Payload):原始字节序列载荷

即在SODB的后面添加了trailing bits,即一个bit 1和若干个bit 0,以便字节对齐。

EBSP (Encapsulated Byte Sequence Payload):扩展字节序列载荷

NALU单元是通过开始码“0x00 0x00 0x00 0x01”或者“0x00 0x00 0x01”来表示一个NALU单元的开始,同时H265规定,当检测到“0x00 0x00 0x00”时,也可以表示当前NALU的结束。那这样就会产生一个问题,就是如果在NALU的内部,出现了“0x00 0x00 0x01”或“0x00 0x00 0x00”时该怎么办?所以在h265码流中规定每有两个连续的“0x00 0x00”,就增加一个“0x03”,从而预防压缩后的数据与开始码产生冲突,防止竞争。

四、H265数据示例

利用UItraEdit工具打开一个H265文件进行数据分析,如下图所示:


H265.png

如上图所示,我们可以清晰的看到在H265码流中,是以“0x00 0x00 x00 0x01”为开始码的,找到开始码后,后面的两个字节表示NALU Header,上图所示分别标注了VPS、SPS、PPS、IDR类型。

相关文章

  • Android音视频【五】H265/HEVC&码流结构

    人间观察我好像还什么都没有准备好,就到了而立之年的年纪,不是吃一个糖就能开心的年纪了。 前面我们了解了H264/A...

  • h265 码流分析帧类型判断

    分析下h265码流(字节流模式),nal单元如何分割,类型。 先上一段h265的码流片段 nal单元分割寻找0x0...

  • 音视频开发——H265码流解析

    概述 H.265技术的应用 编码技术主要运用于视频播放设备、软件应用以及拍摄、录制视频的设备。人们最熟悉的莫过于P...

  • 深入讲解音视频编码原理,H264码流详解——H264分层

    音视频高手课07-视频流H264码流分析实战 1.1 H.264编码格式 H.264的功能分为两层: 视频编码层网...

  • Codec学习资料

    国内外优秀音视频博客 Android平台多媒体框架 MediaCodec 常用音视频编码格式(H264, HEVC...

  • 使用ffprobe进行音视频流的分析(一)

    音视频流的结构的分析对进行音视频的处理或者对直播过程中的直播流的卡顿等情况的分析处理起到了至关重要的作用。目前刚刚...

  • Android 利用 FFmpeg 打印码流信息

    一、获取码流信息 我们希望通过 FFmpeg 获取码流如下一些信息: 码流的数量 码流的时间长度 音视频的索引值 ...

  • FFmpeg转封装(7)

    音视频文件音视频流抽取 1.FFmpeg抽取音视频文件中的AAC音频流 2.FFmpeg抽取音视频文件中的H.26...

  • h265结构

    SPS解析: 一段HEVC码流可能包含一个或者多个编码视频序列CVS,每个CVS由一个随机接入点开始,即IDR/B...

  • RTMP 应用框架简介

    1、采集推流器 功能:音视频采集、音视频编码、推流 开源方案:rtmpdump 客户端FFmpeg 推流 (可参考...

网友评论

      本文标题:音视频数据处理(二)-H265/HEVC视频码流分析

      本文链接:https://www.haomeiwen.com/subject/wwyqtltx.html