王学岗——H265编码原理详解与码流分析(对应第五节课)
H264在分辨率高的情况下缺点
1,94年h264开始研制。
2,现在屏幕变的越来越大。假设h264以16X16进行编码,但我们的屏幕宽达到了32000像素。编码一帧画面需要400000个宏块。94年的时候也没有3D视频。基于以上两种原因,h265就应运而生了。
标题h264与h265的区别
1,以H242,sps帧为例,其帧类型用16进制表示是67,2进制就是8位。
如果要表示5种帧类型,根本不需要8位(3位就可以)。那其它5位代表什么呢?H264只有5种帧类型?
0110 0111:第一位表示帧是否可用,0表示可用,1代表不可用。解码的时候,只解码可用的帧。
解码器同时把多个帧(比如sps,I帧,p帧,b帧)读取到内存,这个时候解码顺序按照帧是否重要来解码。
第二位和第三位表示重要的等级,11>10>01>00。四个选项正好需要2位表示。在解码器忙不过来的时候,直接丢掉不重要的帧。
后面5位表示帧类型,h264帧类型有32(2的五次方,正好是最后5位)种。
p帧b帧就是不区分,IDR可以理解为I帧(但发过来I帧不等于IDR)。序列参数集就是sps(Sequence Paramater Set)。图像参数集就是pps(picture parameter set)。
2,我们自己怎么计算帧类型(代码中没有计算机可供使用)
1与1等于1,其余三种情况都等于0。
我们看看如何求帧类型。
67是01100111,因为我们只关心后5位,所以我们用00011111(16进制就是1f)去与&该数字。与&完后得到的数字是0000 0111,前面的0可以去掉,所以最终结果是111,十进制就是7。查上面的表可知7就代表sps(序列参数集)
我们现在看看如何求该帧的重要性。
67是01100111,因为我们只关心第二三位,所以用0110 0000去与,得到结果0110 0000。然后位移5。最终得到11。
3,我们模拟下解码器是如何解码的
解码器得到一些帧数据,先判断该帧是否可用,1的话就直接丢弃调,如果是0,就把她们放到一个队列中,按照重要性排序,然后按照重要性输出。输出后判断帧类型,如果是sps帧,就会进入sps解码。如果是其它帧类型( 68pps帧, 65I帧,41P帧,01B帧),就进入其它解码(这里类似个swich语句)。如果发生卡顿就会抛弃B帧(B帧解码就比较耗时)。
4,与H264相比,H265宏块变大;H265最大的宏块为64X64。H264最大宏块为16X16(在细节比较多的情况下,h265压缩率与h264差不多,因为也划分为很多小的宏块)
5,与H264相比,H265多了VPS帧,叫3D配置帧。
6,与H264相比,H265帧类型有64种。
7,与H264相比,H265用16位表示(两个字节)帧。
比如 VPS帧 4001。
0100 0000 0100 0001。
第一位 代表是否可用(1不可用,0可用)
第2-7位 代表帧类型
第8-13位,代表帧ID(H264没有)
第14-16位,代表重要性
求帧类型,40首先与上01111110(7E),得到0100 0000,然后右移一位(除以2),得到0100000(十进制就是32)。查表后得知,帧类型正好是VPS帧
8,H264于H265存储不同
H264如何存储
我们把图片解析成n个宏块
我们看直播,收到的就是封装好的h264,按照一定规则解码h264,就能得到对应的画面
NAL与VCL的关系类似IP与TCP
切片数据就是在VCL层。
一帧就包含了很多切片
预测方向
残差数据:剩下的数据就是残差数据。比如左面像素和上面像素
9,H265如何存储
首先预测方向,h264的预测方向只有0-8(详见上图),但在H265中有35种
王学岗——H265编码原理详解与码流分析(对应第五节课)相关推荐
- 并发编程五:java并发线程池底层原理详解和源码分析
文章目录 java并发线程池底层原理详解和源码分析 线程和线程池性能对比 Executors创建的三种线程池分析 自定义线程池分析 线程池源码分析 继承关系 ThreadPoolExecutor源码分 ...
- Huffman 编码原理详解(代码示例)
1.概述 huffman编码是一种可变长编码( VLC:variable length coding))方式,于1952年由huffman提出.依据字符在需要编码文件中出现的概率提供对字符的唯一编码 ...
- urlencode 与urldecode 函数字符编码原理详解
中文字符编码研究系列第五期,详解 urlencode()与urldecode()函数字符编码原理,两个函数分别用于编码 URL 字符串和解码已编码的 URL 字符串,实现对中文字符的编码 <if ...
- 王学岗视频编码————视频编解码基础与MediaCodec编解码(对应1234节)
为什么要学习音视频 核心竞争力,高端人才相当缺乏,技术迭代慢, 为什么音视频学不好 资料比较少,音视频最难的地方在于编码,没有形成完整的体系 关于音视频编码 上 1,视频文件:MP4,RMVB, AV ...
- (推荐阅读)H264, H265硬件编解码基础及码流分析
需求 在移动端做音视频开发不同于基本的UI业务逻辑工作,音视频开发需要你懂得音视频中一些基本概念,针对编解码而言,我们必须提前懂得编解码器的一些特性,码流的结构,码流中一些重要信息如sps,pps,v ...
- python压缩算法_LZ77压缩算法编码原理详解(结合图片和简单代码)
前言 LZ77算法是无损压缩算法,由以色列人Abraham Lempel发表于1977年.LZ77是典型的基于字典的压缩算法,现在很多压缩技术都是基于LZ77.鉴于其在数据压缩领域的地位,本文将结合图 ...
- Huffman编码原理详解
转载自这里 1.概述 huffman编码是一种可变长编码( VLC:variable length coding))方式,于1952年由huffman提出.依据字符在需要编码文件中出现的概 ...
- 8B/10B编码原理详解、Verilog实现及在JESD204B中的应用
目录 1.8B/10B介绍 2.原理 3.Verilog实现 4.实例:在JESD204B中的应用 参考资料: 1.8B/10B介绍 8B/10B编码的目的是防止串行的数据出现长时间的连0连1,因为这 ...
- 编码原理详解(五)---熵编码(CAVAL)
上一篇我们讲到了ZigZag扫描,经过这一扫描之后,发现原本是4*4的像素矩阵,就变成了一连串的数字,可以说是二维到一维的一个转换吧,而且经过ZigZag扫描后,一连串的数字的最后大部分为0,以及一些 ...
最新文章
- 网络中最常用的网络命令(6)-完整参数
- 社交系统/社群系统ThinkSNS+ alpha.2 版本发布!
- sdut 2139BFS
- unity3d为对象添加脚本的两种方法
- LeetCode算法题-Jewels and Stones(Java实现)
- 汇编程序基本原理知识笔记
- C# VS2017 winForm 使tableLayoutPanel 不闪烁
- 计算机科学 —— 时间戳(timestamp)
- android 通讯录恢复,通讯录恢复
- 人手一份!Vue 3 中文文档来啦!
- 无敌论坛_无敌分享网_无敌资源网|专注CG教程和素材分享
- Kmeans算法思想
- 无线网主dns服务器,无线网的dns怎么设置
- erpc的设计和工作机制
- 电脑b站html加速播放,b站视频怎么加速播放-将B站视频调速播放的方法 - 河东软件园...
- 【初级算法】10.有效的数独
- 注意!出现这十种症状,说明你不适合做程序员
- vue 组件自己不能删除自己,$destroy从组件树上删除+从视图上消失
- 交通·未来系列学术活动第1期:时空交通数据预测方法及应用
- python零基础自学英语软件下载_GitHub - geniux-TI/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...
热门文章
- 国产自主GPU架构“天狼星”在北京亮相
- 记一次30位密钥长度RSA加密破解过程
- VS2013密钥破解
- 在 Zend Studio 12.5 里下断点调试运行 PHP 源代码
- 如何解决新增不成功方法
- 金融系统IT系统的架构前端体系特点 (一)
- Arcgis小技巧【10】——字段计算器的简单用法和示例
- smbj使用smb2及smb3协议遍历文件夹或者文件的方法
- Visio 绘图完如何弄到word中调整位置
- 怎么删除网络里共享的计算机,怎么删除MAC电脑“网络”里的局域网电脑图标或… - Apple 社区...