H2.64和H2.65编码区别
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编码区别相关推荐
- ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别
ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别 最近老为编码问题而烦燥,下定决心一定要将其弄明白!本文主要总 结网上一些朋友提供的 asc ...
- ascii码 iso 8859-1 Unicode 字符编码 UTF8编码 区别 表格
第一:编码简单描述 一.ASCII码:美国佬最初把自己的语言用计算表示,发现 0--127 能把字母表+其它符号全能表示出来 二. iso 8859-1:欧洲人,0---127 是ASCII码,1 ...
- 面试题字符集和编码区别_您和理想工作之间的一件事-编码面试!
面试题字符集和编码区别 A recruiter calls you for a position with your dream company. You get extremely excited ...
- 计算机网络-字符编码的由来(为什么会有乱码,ASCII、Unicode、GBK和UTF-8字符编码区别)
为什么我们在网络中传输数据,需要指定字符编码,例如使用UTF-8.GBK等编码.那么字符编码到底是什么?以前我也很困惑这个问题,但是学习了计算机网络后我们知道,由于底层电路的设计本质,只能是识别0和1 ...
- 计算机32位操作系统指什么,电脑操作系统中32位和64位到底有哪些区别?
电脑操作系统中32位和64位到底有哪些区别?xp系统之后,开始有了Windows7.如果你经常关注,并且安装软件的话,会常常听到32位和64位,这两个有什么区别呢?下面就由小编我来告诉你吧! 1.一般 ...
- h2数据库学习----h2数据库基本使用
依赖 <dependency><groupId>org.glassfish.hk2</groupId><artifactId>hk2</artif ...
- h2数据库学习------h2数据库介绍
介绍 H2是一款内存数据库,适合我们在开发阶段.学习阶段调试代码使用,并不适用于生产阶段,可以满足我们学习与调试代码的需求. H2 数据库是一个用 Java 开发的嵌入式(内存级别)数据库,它本身只是 ...
- 32位和64位到底有什么区别?
目录 从代码到到可执行文件 从可执行文件到进程 CPU位数的含义 系统和软件的位数的含义 程序数值int32和int64的含义 系统位数会限制内存吗? 总结 关于32位和64位,这个概念一直让人比较懵 ...
- 64位字符串的编码解码[转]
一. Base64的编码规则 Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编 码.它将需要编码的数据拆分成字节数组.以3个字节为一组.按顺序排列24 位数据,再把这24位 ...
最新文章
- web.config中httpRunTime的属性(转)
- CF1063B Labyrinth
- mpvue 从零开始 女友的收纳盒 6 mpvue-entry入口管理
- jquery ajax 异步分页,jquery 分页 Ajax异步
- api 另一窗体 之上_12 个设计 API 的安全建议,不要等出事儿了“捶胸顿足”
- 系统架构设计师 - ESB 企业服务总线
- java list筛选数据_java 根据条件在List中筛选出符合条件的对象
- 流程效率低?这里有3个流程优化的建议
- 17.IO、文件、NIO【草案三】
- android简易计算器
- 金融专业本科生毕业论文选题推荐?
- 如何相对正确的安装windws桌面操作系统。
- python中使用ffmpeg合并音频与视频_ffmpeg 在windows 下的安装和使用(python, 合并音频和视频)...
- Django笔记总结
- 每周分享第 60 期
- mysql 允许远程链接
- 计算机演奏喀秋莎教程,微课制作之喀秋莎演示教学.doc
- Ubuntu系统的USB禁用取消方式
- 云计算核心技术和框架整理
- 计算机加载固态硬盘,老电脑加装SSD实录:速度提升十分明显