当前位置: 首页 > java >正文

H264/H265码流类型

文章目录

      • 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抓包:
在这里插入图片描述

在这里插入图片描述

参考:
https://juejin.im/post/6844903853775650824

http://www.xdnf.cn/news/11056.html

相关文章:

  • 总结:如何使用ClearCase进行开发工作
  • 小白的服务器解析漏洞
  • WinPhone学习笔记(三)——WinPhone的动画
  • 活动的启动模式和intent.setFlags方法中的参数值含义
  • 细细探究MySQL Group Replicaiton — 配置维护故障处理全集
  • Android的.dex、.odex与.oat文件区别
  • 找不到d3dx9_42.dll丢失有什么解决方法
  • Eclipse、jdk、Tomcat的下载安装与配置
  • 城堡幻想曲圣魔大战3(Castle Fantisia)艾伦希亚战记和重做版下载安装汉化
  • 最新pr值大于6的网站大全
  • 魔法卡片计算器
  • 读《延参法师语录——生活》有感
  • C#写了一个游戏外挂[转发]
  • 【域控制器EMC】域控制器EMC设计总结
  • java整合QQ联合登录(1)
  • 楼市三字经·新政杂戏
  • 【golang-GUI开发】Qt5的安装
  • DNS域名解析,以及A、AAAA、CNAME、MX、NS、TXT、SRV、SOA、PTR说明
  • VMware Workstation安装以及配置模板机
  • 某连锁酒店泄露数据的分析
  • 大学生个人网页设计 HTML个人网页制作 web个人网站模板 简单静态HTML个人网页作品
  • 能免费能发新闻软文外链的网站部分汇总
  • CMake中target_link_libraries的使用
  • tftp协议服务器IP地址,TFTP服务器的搭建
  • robots.txt 详解
  • Win7系统提示找不到autochk.exe文件的解决办法
  • 禁止鼠标右键的几种方法
  • 国企面试题:如果有第八号当铺,你愿意拿什么换这个offer?
  • 国内知名站长网站 ChinaZ 论坛宣布关闭
  • Android的HTTP方式网络通信----HttpClient