H264解码器原理之一

H264解码器原理之一H264的层次结构包括VCL(视频编码层)与NAL(网络提取层),具体的语法结构,在之前的文章已经提到过,这里就不再赘述了。NAL主要是把VCL的内容进行封装,帮助更好的适合复杂的网络环境。在解码端,NAL解码器又复杂拆分,进行图像重构建,如下图所示解码流程图。大致的解码流程为,解码器接收到压缩的码流,经过熵解码,再经过反量化,再反变换,得到残差数据,当解码器获得解码的头信息后构建一个预测块PR…

大家好,又见面了,我是你们的朋友全栈君。

在这里插入图片描述
H264的层次结构包括VCL(视频编码层)与NAL(网络提取层),具体的语法结构,在之前的文章已经提到过,这里就不再赘述了。NAL主要是把VCL的内容进行封装,帮助更好的适合复杂的网络环境。在解码端,NAL解码器又复杂拆分,进行图像重构建,如下图所示解码流程图。大致的解码流程为,解码器接收到压缩的码流,经过熵解码,再经过反量化,再反变换,得到残差数据,当解码器获得解码的头信息后构建一个预测块PRED,预测块与残差叠加求和就可以得到图像数据UF,最后通过各类滤波器,得到重构图像。

解码流程
1.NAL单元与结构

NAL单元是基于包交换技术在网络中传输,符合传输层和存储介质的数据格式,同时具有头信息功能,各类型封装,比如RTSP,RTMP,都是基于NAL单元的基本封装。NAL单元不仅仅可以基于包,还可基于bit流系统的基本格式,两者区别就是bit流都有一个start code,会在头部记录正确,丢失等信息。

如果NAL单元携带一个编码片,有一个SPS或PPS,它的头部包含3个长比特区,类型T,参考ID,隐藏bit位F。在实际的环境中,如果有一个从无线到有线的环境,当NAL单元到达无线环境,有线传输的校验会检测失败,那么中间的路由可以选择从码流去掉这个NALU,也可以传输,有些解码器可以重构,有些只能抛弃。
NALU头结构
2.NAL单元解码流程

NAL单元解码首先提取RBSR,根据NALU不同的类型进行识别,进入不同类型解码过程。详细的解码过程,都是需要根据不同类型的语法结构去解码。
NAL单元解码
一帧图像的详细解码流程,如下图所示,NAL单元解码,再根据NALU的类型进行SLICE解码,再进行BLOCK解码,最终才是预测块叠加,然后去方块滤波处理,重建图像。
一帧图像详细解码流程
2.图像序列号

在解码端,解码完,需要显示,但是解码的图片往往不能立即显示,因为解码顺序与播放顺序是不一样。在H264用什么来标记播放顺序呢?POC,每个帧都分为顶场和底场序列号,详细的信息如下。根据不同类型的帧,进行排序和调整。
在这里插入图片描述
顶场和底场的函数类型。
在这里插入图片描述
POC类型为0,表示基于前一个参考图像计算当前场或帧,大部分参数都是基于此计算。详细如图所示。
在这里插入图片描述
当POC为1表示是基于前一帧的偏移计算顶场或底场数量。详细流程如下。
在这里插入图片描述
当POC为2时,计算流程如下所示,不能用于连续非参考图像序列中。
在这里插入图片描述
3.参考图像标记过程

当完成一帧图像解码后,需要对已解码图像进行详细处理,当nal_ref_idc不等于0,表示要被标记短期参考或长期参考。具体的操作流程如下图所示。如果图像出现不连续,则用公式PrevRefFrameNum不等于(PrevRefFrameNum+1)%MaxFrameNum。
在这里插入图片描述
今天这里讲解的只是解码端的冰山一角,后面还会补充,欢迎关注微信公众号和头条号同步更新。
欢迎关注
欢迎关注

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150230.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言基础:函数的定义与调用[通俗易懂]

    C语言基础:函数的定义与调用[通俗易懂]    在前面内容中我们调用了一个标准C的库函数,叫printf,那么如果我们想自己定义函数应该如何来编写程序呢?定义函数又有什么好处呢?因为我们在教材中提及到的例子主要目的是为了让读者对程序的原理有一定的了解,所以设定的例子程序通常都比较简单,基本上在几行到十几行,多一点的也就三五十行代而已,但是在真正的编程工作中,我们需要完成的代码将非常大,所以将代码合理的分为不同的区块是很有必要的,…

    2022年6月30日
    33
  • MySQLdump的参数详解大全

    MySQLdump的参数详解大全

    2021年6月2日
    172
  • 【第一篇】Vue的初次邂逅

    【第一篇】Vue的初次邂逅  因为最近需要使用到Vue,所以打算将Vue的学习资料详细整理一份,感兴趣的小伙伴可以一起来哦。一、Vue基础介绍1.什么是Vue.jsVue.js是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App,Vue语法也是可以用于进行手机App开发的,需要借助于Weex)Vue.js是前端的主流框架之一,和Angular.js、Rea…

    2022年6月4日
    27
  • 灵格斯:很好很强大的免费电子辞典「建议收藏」

    灵格斯:很好很强大的免费电子辞典「建议收藏」http://www.readfree.net/htm/200807/4624781.html 本文向大家推介近年来出现的国产免费电子辞典软件“灵格斯”(Lingoes),分为四个部分。首先是基本介绍,然后把它和几款同类软件进行了比较,接下来分享我在实用中发现的3个技巧,最后总结了有关的网址链接。本文以主观片面为原则,效果如何,请指教。1.介绍=============

    2022年7月15日
    30
  • UVALive – 4621 Cav 贪心 + 分析「建议收藏」

    UVALive – 4621 Cav 贪心 + 分析

    2022年1月19日
    56
  • 【PHP】最详细PHP从入门到精通(一)

    【PHP】最详细PHP从入门到精通(一)转载来自 https www cnblogs com liuyongqi p 6885669 html nbsp PHP 从入门到精通 一 PHP 简介和基本知识 PHP 外文名 PHP HypertextPre 中文名 超文本预处理器 是一种通用开源脚本语言 语法吸收了 C 语言 Java 和 Perl 的特点 利于学习 使用广泛 主要适用于 Web 开发领域 PHP 独特的语法混合了 C

    2025年10月3日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号