H2.64编码码流:

H2.65编码码流:

1.概述

H2.64/H2.65码流的组成形式:

序列(GOP),图像(I帧,p帧等),片组(slice group),片(slice),宏块(macroblock),块(block),子块(sub-block),像素(YUV,RGB)。

在H2.64/H2.65码流中是以序列为单位组成的,一个序列包含很多帧图像,一帧图像又可以分为一个或者若干个片,片是由宏块组成的,宏块是编码处理的基本单位。

编码采用双层架构:

VLC:视频编码层

NAL:网络适配层 //主要负责格式化数据并添加头信息,保证介质间的有效传输。

2. NALU头

        编码后的数据以NALU为单位在各网络之间传输,NALU是编码框架的网络适配层。NALU分为NAL头和载荷(RBSP)。

2.1 H2.65的头部结构(2字节)

nal_unit_head{forbidden_zero_bit(1bit):    禁止位nal_unit_type(6bit):        NALU类型nuh_reserved_zero_6bits(6bit):nuh_temporal_id_plis1(3bit):
};

在实际引用中通过nal_unit_type字段获取NALU的单元类型(sps,pps,帧等),计算方法如下:

int nal_type = (buf[0] & 0x7E) >>1 或者 int nal_type = (buf[0]>>1)&0x3f

buf[0]位起始码后的第一个字节。

H2.65的NALU单元类型如下:

Type

类型描述

19

I帧

32

VPS

33

SPS

34

PPS

35 访问单元分隔符

1

P帧 B帧

39 40

SEI

只写了几个重要的类型。其余类型用到的话网上可查。

2.2 H2.64的头部结构(1字节)

nal_unit_head{forbidden_zero_bit(1bit):禁止位nal_ref_idc(2bit):nal_unit_type(5bit):NALU类型
};

H2.64获取NALU类型的计算方法:

int nal_type = buf[0] &1F

Buf[0]为起始码后的第一个字节。

H2.64的NALU单元类型如下:

type

类型描述

0

未定义

1

一个非IDR图像的编码条带(P帧或者B帧)

2

编码条带数据分割块A

3

编码条带数据分割块B

4

编码条带数据分割块C

5

IDR图像的编码条带

6

辅助增强信息SEI

7

序列参数集SPS

8

图像参数集PPS

9

访问单元分隔符

10

序列结尾

11

流结尾

红色填充为实际应用中常用的,11之后的类型不常用就没列举,用到的可以网络查询。

3. 起始码

为了区分哪个NALU是哪个,就引入了起始码的概念,起始码为00000001(4字节)或者000001(3字节)。

那么什么时候用三字节什么时候用四字节呢?

视频流编码的时候马,一帧数据可能会分割成一个或者若干个片(slice),一个NALU单元包含一个片(slice),NALU与片(slice)的关系:

由最上面的码流结构可以知道,一个I帧被分为多个NALU,也就是多个片slice,只有该帧的第一个片的起始码为00000001(四字节),该帧其他片为000001(三字节),SPS,PPS的起始码固定00000001(四字节)。

H2.64和H2.65编码区别相关推荐

  1. ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别

    ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别 最近老为编码问题而烦燥,下定决心一定要将其弄明白!本文主要总 结网上一些朋友提供的 asc ...

  2. ascii码 iso 8859-1 Unicode 字符编码 UTF8编码 区别 表格

    第一:编码简单描述 一.ASCII码:美国佬最初把自己的语言用计算表示,发现 0--127  能把字母表+其它符号全能表示出来 二.  iso 8859-1:欧洲人,0---127 是ASCII码,1 ...

  3. 面试题字符集和编码区别_您和理想工作之间的一件事-编码面试!

    面试题字符集和编码区别 A recruiter calls you for a position with your dream company. You get extremely excited ...

  4. 计算机网络-字符编码的由来(为什么会有乱码,ASCII、Unicode、GBK和UTF-8字符编码区别)

    为什么我们在网络中传输数据,需要指定字符编码,例如使用UTF-8.GBK等编码.那么字符编码到底是什么?以前我也很困惑这个问题,但是学习了计算机网络后我们知道,由于底层电路的设计本质,只能是识别0和1 ...

  5. 计算机32位操作系统指什么,电脑操作系统中32位和64位到底有哪些区别?

    电脑操作系统中32位和64位到底有哪些区别?xp系统之后,开始有了Windows7.如果你经常关注,并且安装软件的话,会常常听到32位和64位,这两个有什么区别呢?下面就由小编我来告诉你吧! 1.一般 ...

  6. h2数据库学习----h2数据库基本使用

    依赖 <dependency><groupId>org.glassfish.hk2</groupId><artifactId>hk2</artif ...

  7. h2数据库学习------h2数据库介绍

    介绍 H2是一款内存数据库,适合我们在开发阶段.学习阶段调试代码使用,并不适用于生产阶段,可以满足我们学习与调试代码的需求. H2 数据库是一个用 Java 开发的嵌入式(内存级别)数据库,它本身只是 ...

  8. 32位和64位到底有什么区别?

    目录 从代码到到可执行文件 从可执行文件到进程 CPU位数的含义 系统和软件的位数的含义 程序数值int32和int64的含义 系统位数会限制内存吗? 总结 关于32位和64位,这个概念一直让人比较懵 ...

  9. 64位字符串的编码解码[转]

    一. Base64的编码规则 Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编 码.它将需要编码的数据拆分成字节数组.以3个字节为一组.按顺序排列24  位数据,再把这24位 ...

最新文章

  1. web.config中httpRunTime的属性(转)
  2. CF1063B Labyrinth
  3. mpvue 从零开始 女友的收纳盒 6 mpvue-entry入口管理
  4. jquery ajax 异步分页,jquery 分页 Ajax异步
  5. api 另一窗体 之上_12 个设计 API 的安全建议,不要等出事儿了“捶胸顿足”
  6. 系统架构设计师 - ESB 企业服务总线
  7. java list筛选数据_java 根据条件在List中筛选出符合条件的对象
  8. 流程效率低?这里有3个流程优化的建议
  9. 17.IO、文件、NIO【草案三】
  10. android简易计算器
  11. 金融专业本科生毕业论文选题推荐?
  12. 如何相对正确的安装windws桌面操作系统。
  13. python中使用ffmpeg合并音频与视频_ffmpeg 在windows 下的安装和使用(python, 合并音频和视频)...
  14. Django笔记总结
  15. 每周分享第 60 期
  16. mysql 允许远程链接
  17. 计算机演奏喀秋莎教程,微课制作之喀秋莎演示教学.doc
  18. Ubuntu系统的USB禁用取消方式
  19. 云计算核心技术和框架整理
  20. 计算机加载固态硬盘,老电脑加装SSD实录:速度提升十分明显

热门文章

  1. c语言程序教师节祝福,2015年教师节祝福语(大学生适用)
  2. Windows10 运行 WSA
  3. C#:今日上机问题描述:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。
  4. 往数据库里面插入data数据
  5. 驰骋工作流自定义表单的需求--表单设计器
  6. 神奇的Gamma函数
  7. QWS:Qt Windows System
  8. 用matlab解方程组例子,Matlab求解超定方程组实例
  9. 在线教育软件开发的目的是什么?
  10. GaussDB架构(上)