• 王学岗——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。
    后面5位表示帧类型,h264帧类型有32(2的五次方,正好是最后5位)种。
    在这里插入图片描述
    2,我们自己怎么计算帧类型(代码中没有计算机可供使用)
    1与1等于1,其余三种情况都等于0。
    我们看看如何求帧类型。
    67是01100111,因为我们只关心后5位,所以我们用00011111去与&该数字。与&完后得到的数字是0000 0111,前面的0可以去掉,所以最终结果是111,十进制就是7。
    我们现在看看如何求该帧的重要性。
    67是01100111,因为我们只关心第二三位,所以用0110 0000去与,得到结果0110 0000。然后位移5。最终得到11。
    3,我们模拟下解码器是如何解码的
    解码器得到一些帧数据,先判断该帧是否可用,0的话就直接丢弃调,如果是1,就把她们放到一个队列中,按照重要性排序,然后按照重要性输出。输出后判断帧类型,如果是sps帧,就会进入sps解码。如果是其它帧类型,就进入其它解码(这里类似个swich语句)。如果发生卡顿就会抛弃B帧。
    4,与H264相比,H265宏块变大;H265最大的宏块为64X64。H264最大宏块为16X6
    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)。得到20(十进制)。查表后得知,帧类型正好是VPS帧
    8,H264如何存储
    在这里插入图片描述

    我们把图片解析成n个宏块
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    一帧就包含了很多切片
    在这里插入图片描述
    在这里插入图片描述
    9,H265如何存储
    首先预测方向,h264的预测方向只有0-8,但在H265中有35种
    在这里插入图片描述

  • 相关阅读:
    【数据结构】栈的顺序表实现
    【C++】动态内存管理 ① ( C 语言中的动态内存管理 | C 语言 内存申请 | C 语言 内存释放 | 代码示例 )
    Spring Boot 集成 WebSocket 实例 | 前端持续打印远程日志文件更新内容(模拟 tail 命令)
    461.汉明距离
    CompletableFuture的理解
    图书管理系统(面向对象+数组)
    python将dataframe指定列更新至Mysql
    面向全局搜索的自适应领导者樽海鞘群算法-附代码
    FFmpeg 命令:从入门到精通 | ffmpeg 命令提取像素格式和 PCM 数据
    基于通用学习环境和多智能体深度强化学习的列车运行图
  • 原文地址:https://blog.csdn.net/qczg_wxg/article/details/126176338