【H.264/AVC视频编解码技术详解】十二、解析H.264码流的宏块结构(上)

简介: 《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.

《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看!

“纸上得来终觉浅,绝知此事要躬行”,只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会!

链接地址:H.264/AVC视频编解码技术详解

GitHub代码地址:点击这里

H.264中Slice Body——宏块结构(Macroblock)的解析

1.Slice Data结构的定义

在已经实现了一个slice的header部分之后,下面的工作将是研究如何解析一个slice的主体,即Slice Body部分。一个Slice的body部分主要是一个个的宏块结构Macroblock组成,此外还存在一些辅助的信息。标准文档中规定的slice_data()结构如下图:

从文档中我们可以看出,Slice_data结构中独立的语法元素并不多,主要只有以下几个:

  1. cabac_alignment_one_bit:表示如果码流启用了CABAC算法,那么码流在这里必须使用若干个比特1实现字节对齐。
  2. mb_skip_run和mb_skip_flag:这两个语法元素都用于表示宏块结构是否可以被跳过。“跳过”的宏块指的是,在帧间预测的slice中,当图像区域平坦时,码流中跳过这个宏块的所有数据,不进行传输,只通过这两个语法元素进行标记。在解码端,跳过的宏块通过周围已经重建的宏块来进行恢复。mb_skip_run用于熵编码使用CAVLC时,用一个语法元素表示连续跳过的宏块的个数;mb_skip_flag用于熵编码使用CABAC时,表示每一个宏块是否被跳过。
  3. mb_field_decoding_flag:标识位,用于在帧场自适应的码流中标识某个宏块是帧模式还是场模式。
  4. end_of_slice_flag:在CABAC模式下的一个标识位,表示是否到了slice的末尾。

上述的几个语法元素毫无疑问仅仅占用了全部数据很少的一部分,其他大部分的数据都包含在宏块结构中,即上表中的macroblock_layer()结构。

2. 宏块(Macroblock)结构

从上表中我们可以看出,一个Slice结构中宏块实际上占据了绝大部分。在标准中一个宏块的结构定义为下表:

(1). mb_type:

在一个宏块中,最开始的语法元素为宏块的类型:mb_type。从表中我们可以看出,根据mb_type的值是否等于I_PCM,整个解析方法分为两大类:PCM类型和非PCM类型,判断依据是当mb_type为25时为I_PCM模式,否则为非I_PCM模式。

当这个宏块为I_PCM模式时,宏块中以差分编码的形式保存宏块原始的像素值。此时存在如下几个语法元素:

  • pcm_alignment_zero_bit:填充位,用比特0来填充直到按字节对齐;
  • pcm_sample_luma:256个亮度分量的差分像素值;
  • pcm_sample_chroma:若干个色度分量的差分像素值,实际数量由码流的颜色格式指定。例如对于最常用的4:2:0格式的视频,共有128个色度像素值。

除了mb_type等于25时可以确定为I_PCM格式之外,其他的mb_type值可能根据帧类型(或slice类型)的不同而不同。比如对于I slice,mb_type的非PCM模式可以选择0~24这些值之一;对于P slice,mb_type只能取0~4这5个值;对于B slice,mb_type可以取0~22这些值之一。目前我们所处理的码流全部由I帧构成,因此我们暂时只考虑I slice的情况。下图是标准文档中规定的I slice的mb_type列表的一部分,完整列表在协议文档的表7-11中:

从上表中我们可以看出,mb_type不仅仅表示了宏块的分割方式,还包含了一些其他的附加信息,如帧内预测模式、亮度和色度分量的coded_block_pattern。当帧内预测使用16×16模式时,宏块整个宏块的预测信息相同,因此不需要为各个子宏块分别指定预测模式,这样可以有效减少消耗的码流。

(2). transform_size_8x8_flag

该语法元素为一个标识位,用于表示在环路滤波之前,预测残差的变换系数解码时依照的尺寸。当该标识位为1时,预测残差按照8×8像素块进行解码;当该标志位不存在或者为0时,预测残差按照4×4像素块进行解码。

(3). coded_block_pattern

coded_block_pattern语法元素常简称做cbp,用于表示当前宏块内的4个8×8子块编码对其中的哪个的残差系数进行编码。值得注意的是该语法元素仅仅在宏块为非I_16x16模式时才存在,因为在I_16x16模式时cbp的有关信息已经在mb_type中体现。

(4). mb_qp_delta

mb_qp_delta表示宏块层的量化参数偏移值,取值范围为[-26, 25]。我们在前面已经在PPS中获取了整个序列的量化参数初始值(由pic_init_qp_minus26计算),在slice header中获取slice层的量化参数偏移slice_qp_delta,因此每一个slice第一个宏块的量化参数可通过下面的公式计算:

QP0=pic_init_qp+26+slice_qp_delta+mb_qp_delta

从第二个宏块开始,每个宏块实际量化参数的计算方法为:
QPn=(QPm+mb_qp_delta+52)%52
目录
相关文章
|
传感器 人工智能 物联网
穿戴科技新风尚:智能服装设计与技术全解析
穿戴科技新风尚:智能服装设计与技术全解析
1290 85
|
编解码 监控 网络协议
RTSP协议规范与SmartMediaKit播放器技术解析
RTSP协议是实时流媒体传输的重要规范,大牛直播SDK的rtsp播放器基于此构建,具备跨平台支持、超低延迟(100-300ms)、多实例播放、高效资源利用、音视频同步等优势。它广泛应用于安防监控、远程教学等领域,提供实时录像、快照等功能,优化网络传输与解码效率,并通过事件回调机制保障稳定性。作为高性能解决方案,它推动了实时流媒体技术的发展。
868 5
|
机器学习/深度学习 人工智能 自然语言处理
AI技术如何重塑客服系统?解析合力亿捷AI智能客服系统实践案例
本文探讨了人工智能技术在客服系统中的应用,涵盖技术架构、关键技术和优化策略。通过感知层、认知层、决策层和执行层的协同工作,结合自然语言处理、知识库构建和多模态交互技术,合力亿捷客服系统实现了智能化服务。文章还提出了用户体验优化、服务质量提升和系统性能改进的方法,并展望了未来发展方向,强调其在客户服务领域的核心价值与潜力。
1096 6
|
数据采集 机器学习/深度学习 存储
可穿戴设备如何重塑医疗健康:技术解析与应用实战
可穿戴设备如何重塑医疗健康:技术解析与应用实战
1027 4
|
监控 负载均衡 安全
静态IP代理与动态IP代理:提升速度与保障隐私的技术解析
本文探讨了静态IP代理和动态IP代理的特性和应用场景。静态IP代理通过高质量服务提供商、网络设置优化、定期更换IP与负载均衡及性能监控提升网络访问速度;动态IP代理则通过隐藏真实IP、增强安全性、绕过封锁和提供独立IP保障用户隐私。结合实际案例与代码示例,展示了两者在不同场景下的优势,帮助用户根据需求选择合适的代理服务以实现高效、安全的网络访问。
633 1
|
负载均衡 JavaScript 前端开发
分片上传技术全解析:原理、优势与应用(含简单实现源码)
分片上传通过将大文件分割成多个小的片段或块,然后并行或顺序地上传这些片段,从而提高上传效率和可靠性,特别适用于大文件的上传场景,尤其是在网络环境不佳时,分片上传能有效提高上传体验。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
1146 140
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1794 29
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
801 4

热门文章

最新文章

推荐镜像

更多
  • DNS