《Android 音视频开发》笔记 - H.265编码

    视频编码方式,是通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式的文件的形式。
    H.265是ITU-TVCEG继H.264之后制定的新的视频编码标准。
    H.265标准围绕着现有的视频编码标准H.264,保留原来的某些技术,同时对一些相关技术加以改进。
    H.265旨在在有限的带宽下传输更高质量的网络视频,仅需要一半的带宽即可播放相同质量的视频。
    H.265 又被称为HEVC(High Efficiency Video Coding,高效率视频编码)。
H.265 == HEVC

H.264向H.265发展的原因

1)视频画面要求更高,从720像素到1080像素;视频流畅度要求更高,帧率从30fps到50fps

  • 宏块个数的爆发式增加
  • 宏块内容复杂度的降低
  • 运动矢量数值的大幅度增加

2)由于H.264本身的缺点
    对于宏块级数字压缩视频的处理过程,H.264一直保持2003年草稿发布时的实现方式,核心压缩原理没有调整与改进。

    H.265重新利用了H.264中定义的很多概念。两者都是基于块的视频编码技术,所以它们有着相同的根源和相近的编码方式,包括:

  • 以宏块来划分图像,并最终以块来细分
  • 使用帧内压缩技术减少空间冗余
  • 使用帧内压缩技术减少时间冗余(运动估计和补偿)
  • 使用转换和量化来进行残留数据压缩
  • 使用熵编码减少残留、运动矢量传输和信号发送中的最后冗余。

H.265码流结构

在这里插入图片描述

网络分层结构 VCL 和 NAL

    VCL (Video Coding Layer,视频编码层)
    NAL(Network Abstract Layer,网络适配层)
    VCL层包含了视频数据的内容,NAL主要负责对视频压缩后的数据进行划分和封装,保证数据能在不同的网络环境中传输。
    通过NAL,视频压缩数据将被根据其内容特性分割成具有不同特性的NAL单元(NAL Unit, NALU),并对NALU的内容特性进行指示。
    因此,传输网络根据NALU的指示就可以优化视频传输的性能,而不需要再分析视频的内容特征。
    NALU可以直接作为载体进行传输,而由于不同网络支持的最大传输单元(Maximum Transmission Unit,MTU)是不一样的,因此存在一个网络分组包含一个或者多个NALU,或者多个网络分组包含一个NALU。

    对于一个码流文件来说,其中包含一系列的NAL头,根据H.265对NALU的类型定义,可以解析出其是VPS、SPS、PPS等6种类型。

1)H.265的一个图像序列的组成:VPS+SPS+PPS+SEI+1个I帧+若干个P帧。VPS、SPS、PPS、SEI、1个I帧、1个P帧都可以称为一个NALU。

2)H.265的NALU结构:开始码+NALU头+NALU数据

  • 开始码大小为4字节,是一个固定值00 00 00 01(十六进制数),指示一个NALU的开始。
  • NALU头大小为2字节,共16位,第一位值为0,第2-7位位NALU的type位(共6位),标识当前NALU的类型,第8-15位值为0,第16位值为1.
  • NALU数据为编码器编码出来的图像信息或图像数据。

3)6种类型的NALU

  • VPS(视频参数集):NALU头值为0x4001(十六进制数),NALU头type为值为32(十进制数)
  • SPS(序列参数集):NALU头值为0x4201(十六进制数),NALU头type为值为33(十进制数)
  • PPS(图像参数集):NALU头值为0x4401(十六进制数),NALU头type为值为34(十进制数)
  • SEI(补充增强信息):NALU头值为0x4e01(十六进制数),NALU头type为值为39(十进制数)
  • I帧:NALU头值为0x2601(十六进制数),NALU头type为值为19(十进制数)
  • P帧:NALU头值为0x0201(十六进制数),NALU头type为值为1(十进制数)

4)H.265的NALU打包成RTP包的模式

  • 一个NALU打包成一个RTP报,只需要在一个12字节的RTP包头后添加去掉开始码的NALU即可。(这种模式在一个NALU的大小小雨MTU时使用)
  • 一个NALU打包成几个RTP包(FUs模式),在12字节的RTP头后面有2字节的PayloadHdr和1字节的FU header。PayloadHdr的值等于NALU头的type位改为49(十进制数)后的值。FU header第1位标记RTP包是否为NALU的第一片,第2位标记RTP包是否为NALU的最后一片,后6位是NALU头的type位。

网络适配层单元NALU

    NAL根据视频压缩数据的规则,可以封装成不同的NALU,NALU包含VPS、SPS、PPS类型的NALU类型信息,还包含视频片(Slice)的压缩数据。包含视频片压缩数据的NALU,被称为VCLU(VCL NALU),包含其他信息的压缩数据的NALU,则被称为non-VCLU(non-VCL NALU)。
    H.265/HEVC下的NALU包含两部分数据结构:NALU头(Header)和负载(Payload),NALU头长度为固定的2字节,反映NALU的内容特征,而NALU负载长度为整数字节,包含视频压缩后的原始字节序列负载(Raw Byte Seqence Payload,RBSP)。
    RBSP是对视频编码后的原始原始比特流片段SODB(STring OF Data Bits)进行添加尾部(添加结尾比特1,以凑够整字节)的包装。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值