文章目录

  • H.264码流

  • H.264码流格式

  • Annex B

  • AVCC

  • H.265码流

H.264码流

H264中,NALU类型1-5为视频帧,其余则为非视频帧。在解码过程中,我们只需要取出NALU头字节的后5位,即将NALU头字节和0x1F进行与计算即可得知NALU类型,即:

NALU类型 = NALU头字节 & 0x1F  

type=5表示关键帧I帧,6表示sps,7表示pps。

H.264码流格式

H.264标准中指定了视频如何编码成独立的包,但如何存储和传输这些包却未作规范,虽然标准中包含了一个Annex附件,里面描述了一种可能的格式Annex B,但这并不是一个必须要求的格式。 为了针对不同的存储传输需求,出现了两种打包方法。一种即Annex B格式,另一种称为AVCC格式。

Annex B

从上文可知,一个NALU中的数据并未包含他的大小(长度)信息,因此我们并不能简单的将一个个NALU连接起来生成一个流,因为数据流的接收端并不知道一个NALU从哪里结束,另一个NALU从哪里开始。 Annex B格式用起始码(Start Code)来解决这个问题,它在每个NALU的开始处添加三字节或四字节的起始码0x000001或0x00000001。通过定位起始码,解码器就可以很容易的识别NALU的边界。 当然,用起始码定位NALU边界存在一个问题,即NALU中可能存在与起始码相同的数据。为了防止这个问题,在构建NALU时,需要将数据中的0x000000,0x000001,0x000002,0x000003中插入防竞争字节(Emulation Prevention Bytes)0x03,使其变为:

0x000000 = 0x0000 03 00 0x000001 = 0x0000 03 01 0x000002 = 0x0000 03 02 0x000003 = 0x0000 03 03 解码器在检测到0x000003时,将0x03抛弃,恢复原始数据。

由于Annex B格式每个NALU都包含起始码,所以解码器可以从视频流随机点开始进行解码,常用于实时的流格式。在这种格式中通常会周期性的重复SPS和PPS,并且经常时在每一个关键帧之前。

AVCC

AVCC格式不使用起始码作为NALU的分界,这种格式在每个NALU前都加上一个指定NALU长度的大端格式表示的前缀。这个前缀可以是1、2或4个字节,所以在解析AVCC格式的时候需要将指定的前缀字节数的值保存在一个头部对象中,这个都通常称为extradata或者sequence header。同时,SPS和PPS数据也需要保存在extradata中。 H.264 extradata语法如下:

其中第5字节的后2位表示的就是NAL size的字节数。需要注意的是,这个NALULengthSizeMinusOne是NALU前缀长度减一,即,假设前缀长度为4,那么这个值应该为3。 这里还需要注意的一点是,虽然AVCC格式不使用起始码,但防竞争字节还是有的。

AVCC格式的一个优点在于解码器配置参数在一开始就配置好了,系统可以很容易的识别NALU的边界,不需要额外的起始码,减少了资源的浪费,同时可以在播放时调到视频的中间位置。这种格式通常被用于可以被随机访问的多媒体数据,如存储在硬盘的文件。

H.265码流

HEVC全称High Efficiency Video Coding(高效率视频编码,又称H.265),是比H.264更优秀的一种视频压缩标准。HEVC在低码率视频压缩上,提升视频质量、减少容量即节省带宽方面都有突出表现。 H.265标准围绕H.264编码标准,保留原有的某些技术,同时对一些技术进行改进,编码结构大致上和H.264的架构类似。这里着重讲一下两者编码格式的区别。 同H.264一样,H.265也是以NALU的形式组织起来。而在NALU header上,H.264的HALU header是一个字节,而H.265则是两个字节。

NALU类型 = (NALU头第一字节 & 0x7E) >> 1

与H.264类似,H.265码流也有两种封装格式,一种是用起始码作为分界的Annex B格式,另一种则是在NALU头添加NALU长度前缀的格式,称为HVCC。在HVCC中,同样需要一个extradata来保存视频流的编解码参数,其格式定义如下:

type=32 是vps 33是sps 34是pps,16表示关键帧I帧。

H.265编码rtsp传输,Annex B格式码流,SDP抓包:

H.265编码rtsp传输,HVCC格式码流,SDP抓包:

原文链接:H264/H265码流类型 - 资料 - 我爱音视频网 - 构建全国最权威的音视频技术交流分享论坛

本文福利,领取最新最全C++音视频学习提升资料,内容包括(C/C++,Linux 服务器开发,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)↓↓↓↓↓↓文章底部↓↓↓↓见下面

H264/H265码流类型相关推荐

  1. python小工具------将H264/H265码流文件转为一帧一帧的JPEG文件

    一.功能 输入H264/H265码流路径,此脚本可以将对应的码流转为一帧一帧的JPEG文件,并保存到指定路径. 二.具体实现 import av import sysdef h265ToJpg_dem ...

  2. 从H264/H265码流中获取宽、高及帧率

     在做码流分析时,图像分辨率.帧率这类的基本信息,当然不可少.本文介绍如何从NAL中计算到图像宽.高,还有分辨率.由于H264和H265有相似性,就在一起写了. 一.从码流获得宽.高 1.H264 ...

  3. H264/H265码流的编码码率详解

    1.视频码率概念 视频码率是视频数据(视频色彩量.亮度量.像素量)每秒输出的位数,即单位时间传送的数据位数.一般用的单位是kbps(千位每秒).通俗一点来讲就是采样率,单位时间的采样率越大,精度就越高 ...

  4. java h265,H264/H265码流的编码码率设置

    一.什么是视频码率? 视频码率是视频数据(视频色彩量.亮度量.像素量)每秒输出的位数.一般用的单位是kbps. 二.设置视频码率的必要性 在视频会议应用中,视频质量和网络带宽占用是矛盾的,通常情况下视 ...

  5. <整理总结>H264/265码流数据包格式分析(带mp4v2封装H264/265为MP4的源码示例)

    H264/265码流数据包格式分析 前言: 一.H.264码流解析 I帧P帧B帧说明: 二.H.265码流解析 三.主要源码 前言: 最近在学习使用MP4v2将H264/H265码流以及AAC音频封装 ...

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

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

  7. 音视频开发——H265码流解析

    概述 H.265技术的应用 编码技术主要运用于视频播放设备.软件应用以及拍摄.录制视频的设备.人们最熟悉的莫过于PPS网络视频播放器.在PC屏客户端产品上面,PPS已经于2013年初推出了基于H.26 ...

  8. H265码流结构分析

    文章目录 1 准备工作 1.1 H265视频文件 1.2 参考文档 1.3 参考博文 2 分析 2.1 NALU type 2.1.1 H264 2.1.2 H265 2.2 实例分析 最近了解了一下 ...

  9. H265码流RTP封装方式详解

    文章目录 H265码流RTP封装方式详解 1 H265编码方式介绍 2 H265码流RTP封装方式 2.1 单一帧封装模式 2.2 组合帧封装方式 2.3 分片封装模式 2.4 代码片段解析 H265 ...

最新文章

  1. Compass(更新中。。。)
  2. Programming Computer Vision with Python (学习笔记四)
  3. php调用hive,如何进行hive的简单操作
  4. 剑指offer(19)顺时针打印矩阵
  5. jvm虚拟机组成部分讲解、jvm虚拟机参数使用讲解并发编程框架篇
  6. click传值vue_对vue下点击事件传参和不传参的区别详解
  7. Java ObjectStreamClass lookup()方法与示例
  8. GitHub与GitLab的区别
  9. CDOJ--1850
  10. 项目改用GoModules管理依赖的方法和经验总结
  11. axios安装_一起学Vue:访问API(axios)
  12. SWT学生成绩管理系统
  13. python切割图片文字_Python+opencv 实现图片文字的分割的方法示例
  14. tomcat一段时间不操作oracle就关闭连接_操作数据库常见错误,开发人员必掌握的技能...
  15. 机器人对话常用语模板_客服机器人入门,为你公司设计个不休息的客服
  16. 服务器物理硬盘序列号,服务器硬盘序列号查看
  17. php setfield什么意思,thinkphp教程专题
  18. 使用大白菜装win10系统的常见问题解决方案
  19. childnodes与children详解
  20. 新建Maven工程乱七八糟全都失效了

热门文章

  1. EditPlus5注册机
  2. 【历史上的今天】2 月 18 日:电池的发明者出生;全美最大的电脑连锁店开业;Netsky 蠕虫问世
  3. 三维分析之开敞度分析
  4. Bluetooth技术学习笔记 ——HFP控制功能之连接管理
  5. matlab将图片导入工作区,matlab数据的导入和导出,以matlab工作区workspace为source和destination...
  6. 计算机毕业设计ssm客房订餐系统s2whx系统+程序+源码+lw+远程部署
  7. 贝拉博客,一个屌丝网站
  8. iPhone的地图app如何获取任意地点的路线
  9. 有点厉害!用12万行代码堆出来个蔡徐坤,编译还能通过!
  10. 概述知识图谱在人工智能中的应用