H.264/AVC视频编解码技术详解

H.264/AVC视频编解码技术详解
共130节 81238人在学 课程详情
  • 视频信息与压缩编码

    • 人与世界的交互、视频信息的意义
    • 视频信号的表示方法
    • 视频压缩编码
  • 主流视频编码标准的技术发展

    • 主流视频编码标准的发展
    • H.261编码标准
    • H.263、MPEG-1、MPEG-2、MPEG-4编码标准
  • H.264/AVC编码标准

    • H.264/AVC的背景与基本概念
    • H.264视频编码整体架构
    • H.264所采用的编码工具
  • 常见H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码

    • H.264编码器JM与X264
    • 使用JM编解码器进行H.264的编码和解码
  • H.264码流结构

    • H.264的码流封装格式:流格式与包格式
    • 实践:从码流中读取NAL Unit的方法
    • 实践:读取并保存码流中的NAL Unit数据
  • NAL Unit解析

    • NAL Unit 结构分析
    • H.264码流分析器SimpleH264Analyzer工程创建
    • SimpleH264Analyzer解析码流为NAL Unit
    • SimpleH264Analyzer中实现对NAL Unit分析
  • 熵编码算法(1)——基础知识

    • 熵编码的基本概念
    • 哈夫曼编码的原理
    • 实现哈夫曼编码
  • 熵编码算法(2)——H.264标准中的熵编码、指数哥伦布编码

    • H.264中定义的符号解析方法与支持的熵编码算法
    • 指数哥伦布编码的原理和分类
    • 实现指数哥伦布编码
  • H.264的序列参数集Sequence Paramater Set(SPS)

    • H.264的序列参数集SPS结构
    • SimpleH264Analyzer优化、添加Log机制
    • 设计SPS类的结构
    • 在SimpleH264Analyzer整合定长编码、指数哥伦布编码解析算法
    • 实现SPS语法元素的解析和保存
  • H.264的图像参数集Picture Paramater Set(PPS)

    • H.264的图像参数集PPS结构
    • 设计PPS类的结构
    • 实现PPS语法元素的解析和保存
  • H.264的Slice层解析

    • H.264中Slice的概念
    • H.264中Slice的结构
    • 定义I_Slice和SliceHeader结构
    • 解析IDR帧的SliceHeader结构
  • H.264的宏块Macroblock级解析

    • H.264视频中Slice Data结构
    • H.264视频帧的分割与宏块结构
    • H.264的帧内预测宏块的数据结构定义
    • 解析H.264码流的帧内宏块语法元素
  • 熵编码算法(3)——上下文自适应的变长编码CAVLC

    • CAVLC的基本概念与算法
    • CAVLC编码一个系数矩阵(1)
    • CAVLC编码一个系数矩阵(2)
    • CAVLC语法元素解析:数据结构定义
    • CAVLC宏块分割与H.264宏块的邻块可用性
    • 实现开始CAVLC解码一个宏块的准备工作
    • 计算获取CAVLC解码的上下文信息的方法
    • 解析H.264宏块中的block残差的numCoeff和trailingOnes
    • 读取拖尾系数的符号
    • 读取非零系数Level值
    • 读取解析零系数总个数totalZeros
    • 读取零系数游程长度runBefore
    • 解析H.264宏块中的宏块残差语法元素
  • 变换和量化编码(1):矩阵的正交变换原理

    • 矩阵的运算与变换
    • 正交矩阵与矩阵的正交变换
    • 离散余弦变换
  • 变换和量化编码(2):H.264的整数变换方法

    • 从Residual语法元素重建变换系数矩阵(1)
    • 从Residual语法元素重建变换系数矩阵(2)
    • H.264的整数变换方法
    • H.264的量化与反量化
    • 解码预测残差变换系数的反量化
    • 残差系数矩阵的反变换
  • 帧内预测编码(1):帧内预测编码的基本原理

    • 帧内编码的意义与作用
    • 早期视频编码标准的帧内编码
    • 预测编码
    • H.264的帧内预测模式
  • 帧内预测编码(2):H.264帧内编码的方法与实现

    • H.264的帧内预测语法元素的表示方法
    • 帧内预测解码的主要流程
    • 推导子像素块的帧内预测模式
    • 解码宏块、获取子块的预测块
    • 由子块索引推导子块相对宏块的位置
    • 获取相邻块的位置和有效性
    • 导出当前块的预测模式(上)
    • 导出当前块的预测模式(下)
    • 获取帧内预测参考像素(1):方法
    • 获取帧内预测参考像素(2):实现
    • 由参考数据生成预测像素块(上)
    • 由参考数据生成预测像素块(下)
    • 通过预测块与残差数据重建解码像素块
  • 熵编码算法(4)——算术编码的原理与实现方法

    • 算术编码的基本概念
    • 算术编码的基本流程
    • 算术编码器实例的声明
    • 实现一个基本的算术编码器内核
    • 单步调试研究算术编码器内部工作原理与细节(上)
    • 单步调试研究算术编码器内部工作原理与细节(下)
    • 揭秘区间运算与算术编码实现之间的联系
    • 算术编码最广泛的应用场景之一——H.264 Main Profile
  • 熵编码算法(5)——H.264的CABAC(上):语法元素的二值化方法

    • H.264的CABAC基本概念
    • CABAC编码器的初始化
    • 常用语法元素二值化方法
    • 特定语法元素的二值化
  • H.264的去块滤波器

    • 视频编码块效应与去块滤波基本原理
    • 去块滤波的执行过程
    • 块/宏块边沿的滤波方法
    • 去块滤波的实现案例(1):框架结构
    • 去块滤波的实现案例(2):计算滤波强度
    • 去块滤波的实现案例(3):获取参考像素信息
    • 去块滤波的实现案例(4):获取参考像素信息(续)
    • 去块滤波的实现案例(5):滤波边界像素1-数据准备
    • 去块滤波的实现案例(6):滤波边界像素2-判断条件
    • 去块滤波的实现案例(7):滤波边界像素
    • 去块滤波的实现案例(8):水平边沿像素滤波
  • 熵编码算法(6)——H.264的CABAC(中):CABAC的上下文环境

    • CABAC的编解码上下文
    • 上下文模型索的初始化与更新
    • CABAC编解码上下文的导出
  • 熵编码算法(7)——H.264的CABAC(下):语法元素的CABAC解析

    • CABAC解码总流程
    • CABAC算术编码的解码(解析)过程
    • CABAC解码归一化过程
    • CABAC的bypass和终止符解析方法
    • CABAC在JM8.6中的实现——初始化方法
    • CABAC在JM8.6中的实现——宏块类型的解析方法
    • CABAC在JM8.6中的实现——DecodeDecision和DecodeTerminate的实现
  • 帧间预测编码(1):帧间预测编码的基本原理

    • 视频信息的时间冗余与物体的运动表示
    • 块结构的运动估计和运动补偿
    • 运动矢量
    • 运动矢量预测的计算方法
    • 亚像素差值
    • 运动搜索快速算法
  • 帧间预测编码(2):参考帧与图像管理

    • 基本概念
    • 解码顺序与显示顺序
    • 图像管理-计算图像索引
    • 标记参考帧-滑动窗口法标记参考帧
    • 标记参考帧-自适应内存控制法标记参考帧
  • 帧间预测编码(3):参考帧列表

    • 参考帧列表
    • 参考帧列表的初始化
    • 参考帧列表修改过程
  • 帧间预测编码(4):宏块的帧间解码

    • 帧间预测宏块类型
    • 帧间编码宏块的格式
    • Skip模式和Direct预测
  • 总结

    • 总结

    订阅失败

    H.264/AVC视频编解码技术详解
    H.264/AVC视频编解码技术详解 ...

    订阅列表已满,请先移出部分订阅内容。

    当前章节需购买后观看
    开通超级会员免费看!专家精选系列课程,满足你从入门到精通!更有问答月卡免费送,你的问题有问必答!
    提交答案

    购买课程

    扫码完成付费,可继续学习全部课程内容

    加载中...
    播放页问题反馈
    视频学习中有任何产品建议都可由此反
    馈,我们将及时处理!

    课时介绍

    大家好,今天我们再次探讨H264视频编解码的算法基本原理。在上一期中,我们了解了如何使用H264官方提供的参考代码GM进行视频序列的编码,以及使用GM的解码器对H264码流进行解码生成输出的YOV视频图像文件的方法。今天我们将进一步研究H264编码后生成的码流的结构。在H264语法元素进行编码之后,生成的输出数据都封装为NLUnit来进行传递。这多个NLUnit的数据组合在一起形成了总的输出码流。对于不同的应用场景,NL规定了一种通用的格式来适应不同类型的传输封装类型。一般NLUnit的传输格式分为两大类:自节流格式和RTP包格式。 首先,我们来看一下自节流的格式。自节流的格式是H264标准协议文档中规定的应用格式,在文档中属于-B的部分。这种自节流格式也是大多数编码器实现的默认输出格式。在这种格式中,自节流以连续的比特自节的形式传输编码完成的码流。因此,我们必须设计一种方法来从码流中提取NLUnit的单元。在这个过程中,可以使用0001或001这三个或四个字节作为起始码,通过起始码来区分不同NLUnit之间的分隔。 第二种方式称为RTP的数据包格式。这种包格式方法将NLUnit按照RTP数据包格式封装。使用RTP包格式不需要额外的分隔识别码,因为在包的封装信息中已包含详细的数据长度信息。这种封装格式在H264标准协议文档中没有明确规定,但在解码器中已经做了一定处理。如果要使用这种数据封装格式,可以直接封装NLUnit,而无需使用起始码。只需在每个NLUnit之前添加固定字节,比如两个或四个字节的整数,表示该NLUnit的长度。读取这些字节的数据,即可获取一个完整的NLUnit单元。 由于JAM编码器输出的是流格式,我们在之后的分析过程中以这个字节流的格式为主要分析内容。字节流格式在标准协议文档的复制B章节中定义。在这一章节中,以表格的形式描述了NL单元的语法。表格中包括这几个元素:leading zero(8 bits),表示长度为一个字节的前导铃;如果后面24个比特不是001,那么接下来是一个字节的零数据;随后是statcode prefix的133 bytes,表示一个长度为3个字节的1(24个比特);接着是NLUnit的实际数据,再到末尾的拖尾零数据,一直到下一个NLUnit的开始。这些语法元素都是以不同长度的定长码(即按二进制整数表示)来表示的。主要包括前缀零、直为零的一个字节,以及NLUnit的起始码(固定为001),以及后缀为零。 在了解了NLUnit和H264码流的结构之后,如何从码流中提取NL单元的实际数据呢?方法相当简单——查找statcode prefix(0001或001)之间的数据即为一个NLUnit的有效数据。比如,如果一个二进制文件中的字节流是一段连续的数字,那么它的实际内容就是0001到下一个0001之间的红色数据段。因此,在解码过程中,我们只需查找起始码之间的数据即可获得有效数据。最后,我们将尝试编写一个简单的程序来从一个二进制码流文件中截取0001或001前缀码中间的NLUnit数据,方法也十分简单。

    课程介绍

    H.264/AVC是目前业界应用为广泛的视频压缩编码标准,包含了先进而且较为成熟的视频编码技术。本课程将从原理、标准和实现等多个角度,详细讲述了H.264/AVC视频编码标准的整体架构与技术细节,不但讲解了H.264/AVC标准协议文档中的内容,还通过实际的H.264码流分析/解码程序的开发来帮助观众更深入地理解H.264编码标准的原理。
    推荐课程

    H.264/AVC视频编解码技术详解

    殷汶杰 · 81238人在学

    FFmpeg系列之33:庖丁解牛之H.264/H.265视频编码

    梅会东 · 453人在学

    Windows之5:DirectShow+H.264+AAC采集编码

    梅会东 · 87人在学

    FFmpeg4.3开发系列之15:同步录音录屏并存储或直播实战

    梅会东 · 437人在学

    rtp协议实战视频教程

    杨炳坤 · 371人在学

    FFmpeg4.3开发系列之二:音视频基础理论

    梅会东 · 1058人在学

    JavaCV系列之2:JavaCV音视频基础及麦克风摄像头直播实战

    梅会东 · 489人在学

    Android视频编码和直播推流教程

    杨万里 · 7436人在学

    C#零基础入门到精通教程

    徐杨 · 6909人在学

    正在试验
    后自动删除环境
    课程实验
    本次实验时间已到期 00:00:00
    课件正在飞速打包中,请耐心等待几秒钟~