一.前言

高效率的数据压缩性能和底失真的图象视频压缩效果是各种视频编码技术所追求的目标。高效率的视频压缩编码意味这消除视频图像的空间相关性和时间相关性,使得编码器端输出的比特流的冗余信息很少,因而造成了视频码流对编码或者传输中产生的差错误码非常敏感。一但解码过程中出现误码,不仅影响该误码数据所在帧的重构,而且还会影响其他以该帧为参考的视频帧的解码,造成错误的扩散。严重情况下,解码器会中断码流的解码。因此,视频编码中,不仅要考虑编码效率,还要考虑到视频流的错误恢复能力。

本文中,归纳总结了H.264标准中视频编码的错误恢复的技术和一些最新提出的错误恢复方法。按照各种编码错误恢复技术的原理不同,可把它们可以分为如下几类:提取视频重要数据进行单独传输、传输冗余数据块、帧内图像的重同步、抗误码扩散。以下内容将介绍各种技术以及它们的优缺点。

二.H.264错误恢复技术

1.提取视频重要数据进行单独传输。

视频流在网络中的传输时,如果一些关键信息丢失时,会造成解码端的严重失误。因此可以将这些关键信息提取出来,然后用一种安全可靠的途径来单独传输这些重要信息。使得解码端使用这些关键信息去尽量恢复已经丢失或者出错了的视频数据。H.264中有两种机制采用了该原理,它们是参数集和数据分割。

1.1 参数集

参数集是一种通过改进视频码流结构增强错误恢复能力的方法。H.264的参数集又分为序列参数集和图像参数集。其中,序列参数集包括一个图像序列的所有信息,即两个IDR图像(首个I帧)间的所有图像信息。图像参数集包括一个图像的所有分片的所有相关信息,包括图像类型、序列号等,解码时某些序列号的丢失可用来检验信息包的丢失与否。多个不同的序列和图像参数集存储在解码器中,编码器依据每个编码分片的头部的存储位置来选择适当的参数集,图像参数集本身也包括使用的序列参数集参考信息。

H.264将关键信息,如序列和图像的头信息,分离出来,凭借参数集的设计,确保在易出错的环境中能正确地传输。这种码流结构的设计无疑增强了码流传输的错误恢复能力。

参数集具体实现的方法也是多样化的:
(1)通过带外传输,这种方式要求参数集通过可靠的协议,在首个片编码到达之前传输到解码器;
(2)通过带内传输,这需要为参数集提供更高级别的保护,例如发送复制包来保证至少有一个到达目标;
(3)在编码器和解码器采用硬件处理参数集。

1.2 数据分割

通常情况下,一个宏块的数据是存放在一起而组成片的,数据划分使得一个片中的宏块数据重新组合,把宏块语义相关的数据组成一个划分,由划分来组装片。H.264视频编码标准使用了三种不同类型的数据分割。

(1) A型分割

A型分割是头信息划分,包括宏块类型、量化参数和运动矢量,这个信息是最重要的。

(2)B型分割

B型分割是帧内信息划分,包括帧内CBPs和帧内系数。帧内信息可以阻止错误的传播,该型数据分割要求给定分片的A型分割有效,相对于帧间信息,帧内信息能更好地阻止漂移效应,因此它比帧间分割更为重要。

(2) C型分割

C型分割是帧间信息划分,包括帧间CBPs和帧间系数,一般情况下它是编码分片的最大分区。帧间分割是最不重要的,它的使用要求A型分割有效

当使用数据分割时,源编码器把不同类型的分割安排在3个不同的缓冲器中,同时分片的尺寸必须进行调整以保证小于MTU长度,因此是编码器而不是NAL来实现数据分割。在解码器上,所有分割用于信息重建。这样,如果帧内或帧间信息丢失了,有效的帧头信息仍然能用来提高错误隐藏效率,即有效的宏块类型和运动矢量,保留了宏块的基本特征,从而仍可获得一个相当高的信息重构质量,而仅仅丢失了细节信息。

2.传输冗余片

H.264中,解码器是以片为单位进行解码的。冗余分片允许编码器把在同一个码流中添加同一MB的一个或更多冗余表示。需要注意的是这些冗余片的编码参数与非冗余片的编码参数不同,例如主片可用低QP(高质量)来编码,而冗余信息中能用一个高QP(低质量)的方式来编码,这样质量粗糙一些但码率更低。解码器在重构时,首先使用主片,如果它可用就抛弃冗余片;而如主片丢失(比如因为包的丢失)冗余片也能被用于重构。冗余片主要用于支持高误码的移动环境。

传输冗余片会使得网络负荷增加,降低了视频流的传输效率,在网络带宽较少的情况下效果很差。如果能采用一种反馈机制,可以依据网络实时情况,来动态的选择那些MB需要传送冗余块,以及可以传输的块的数目的上限,以便是视频流的传输过程可以依据网络负载状况自动的调节。

3. 帧内编码

为了提高视频帧用更强的重新同步性能,增强其错误恢复能力,H.264对于帧内编码,在以往的视频编码标准的基础上做了一些改进,主要体现在:

(1)H.264中帧内预测宏块的参考宏块可以是帧间编码宏块,帧内预测宏块并不像H.263中的帧内编码一样,而采用预测的帧内编码比非预测的帧内编码有更好的编码效率,但降低了帧内编码的重同步性能,可以通过设置限制帧内预测标记来恢复这一性能。

(2)只包含帧内宏块的片有两种,一种是帧内片(I Slice),一种是立即刷新片(IDR Slice)。立即刷新片需存在于立即刷新图像(IDR Picture)中。与短期参考图像相比,立即刷新图像有更强壮的重同步性能。

为了更适用无线IP网络环境中的应用,H.264通过采用率失真优化编码和设置帧内预测标志,来提高帧内图像的重同步性能。

4.抗误码扩散
4.1按片独立编解码

一幅图像由若干片组成,每片包含一系列的宏块(MB)。MB的排列可按光栅扫描顺序,也可不按扫描顺序。每个片独立解码,不同片的宏块不能用于自身片中作预测参考。因此,片的设置不会造成误码扩散。

4.2 多参考帧的选择

在解码每一帧时,该帧的重构的失真或者出错,都和编码时参考帧的选择有很大的关系。在MPEG-2中,每一个P帧用它的直接前向帧作为参考帧。基于这种预测模式,一个传输错误就会导致整个帧序列的错误传播。很显然,那些距离I帧,即图中第一帧,很远的视频帧,更加容易遭受错误传播的侵害,因为其前面任何帧的传输错误都会影响本帧的重构。H.264采用了多参考帧,而且参考帧的选择方式也有很多,现在人们也提出了很多种参考帧的选择方法,以避免错误通过参考帧传到本帧中来。如采用隔帧参考,即采用本帧的前后向第1,3,5帧作为参考,则其前后的2,4,6帧的错误就无法传到本参考帧中。

4.3 灵活的宏块排序FMO

灵活的宏块排序FMO是H.264的一大特色,适用于H.264的基本档次和扩展档次的应用。图像内部预测机制,例如帧内预测或运动矢量预测,仅允许用同一片组里的空间相邻的宏块。FMO通过宏块分配映射技术,把每个宏块分配到不按扫描顺序的片中。FMO模式划分图像的模式各种各样,重要的有棋盘模式、矩形模式等。当然FMO模式也可以使一帧中的宏块顺序分割,使得分割后的片的大小小于无线网络的MTU尺寸,经过FMO模式分割后的图像数据分开进行传输。

在FMO中,一个片的所有MB被分成了片组0和片组1,这些块交替相邻,当片组0中的宏块数据丢失时,其周围的块都是片组1中的块,利用邻域相关性,可以用它周围四宏块来表示当前的丢失块。这种错误隐藏机制可以明显提高抗误码性能。实验证明,在CIF图像的视频会议中,在丢包率达10%时,视频失真低到需要训练有素的眼睛才能识别。使用FMO的代价是稍微降低了编码效率(因为它打破了原先非邻居MB之间的预测),而且在高度优化的环境中,有较高的时延。

4.4错误跟踪

这是最新提出来的一种方案,是一种基于运动跟踪的快速交互式抗误码算法,该算法由解码器检测出错误位置,然后编码器在编码后续帧时采用运动跟踪的原理定位出受误码影响的区域,并对区域内的宏块数据进行相应的处理,以防止误码进一步扩散。该方法会对编码器增加一定的运算复杂度。并会给实时视频增加一些负担。
————————————————
版权声明:本文为CSDN博主「阳光的威威」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lixiaowei16/article/details/44891907

H264 的视频编码层的错误恢复相关推荐

  1. 有效解决微信小程序加载视频[渲染层网络层错误] Failed to load media

    问题1,小程序的视频一般都是放在网络上的,没谁能把视频放本地把,所以在小程序视频插件在加载视频的时候,就会出现如下错误:[渲染层网络层错误] Failed to load media wxml加载视频 ...

  2. iOS H264,H265视频编码(Video encode)

    本例需求:使用H264, H265实现视频数据的编码并录制开始200帧存为文件. 原理:比如做直播功能,需要将客户端的视频数据传给服务器,如果分辨率过大如2K,4K则传输压力太大,所以需要对视频数据进 ...

  3. Hi3516EV200进行H264/H265视频编码要点注意

    目录 说明 开发环境和交叉编译工具链 IMX307的MIPI配置 VENC视频缩小和VGS 关于同时启动的VENC编码通道数 本文资源分享 说明 本博客性质属于个人学习记录,都是自己踩过的坑. 本文叙 ...

  4. 视频编码h264怎么看_你所要知道的音视频--04

    上一篇文章我们主要讲解了音频压缩算法的主要指标,以及几个典型的音频压缩算法.本章将延续上一讲的内容,分析视频压缩算法. 视频压缩算法 视频压缩算法比较,Wiki百科官方收录分类,请自备梯子 视频压缩算 ...

  5. 音视频开发(29)---深入浅出理解视频编码H264结构

    深入浅出理解视频编码H264结构 编码流程: 那么 H.264 其编解码流程是怎么样的呢?其实可以主要分为 5 部分: 帧间和帧内预测(Estimation).变换(Transform)和反变换.量化 ...

  6. 视频编码标准汇总及比较

    MPEG-1 类型:Audio&Video 制定者:MPEG(Moving Picture Expert Group) 所需频宽:2Mbps 特性:对动作不激烈的视频信号可获得较好的图像质量, ...

  7. H264和h265编码

    未压缩的码流:一秒钟码流大小:640x480x1.5x15x8=55296000 (是55MB)其中 1.5是yuv占用1.5倍,rgb是3倍,8是一个字节是八位bit H264的建议码流是500kp ...

  8. MPEG-4与H264区别,编码及应用

    H264 编解码协议详解 https://blog.csdn.net/qq_19923217/article/details/83348095 H264视频--x264编解码原理详解 https:// ...

  9. 视频编码:H.264编码

    本文参考毕厚杰老师<新一代视频压缩编码标准-----H.264/AVC>一书以及雷霄骅博客<视音频编解码技术零基础学习方法>整理. 1.概念部分: H.264编码: 视频编解码 ...

最新文章

  1. 思谋科技|计算机视觉、3D视觉、SLAM算法招聘
  2. ELK 环境搭建1-Elasticsearch
  3. int*与(int*)的差别
  4. android -support-v4.jar是什么文件
  5. mysql切换用户sql语句,MySQL用户管理及SQL语句详解
  6. amd sata controller下载_AMD发布全新锐龙芯片组驱动:告别卡死、报错
  7. javascript好文---深入理解定位父级offsetParent及偏移大小
  8. 安装Sarge(二) 配置基本系统
  9. Codeforces Round #415 (Div. 2) C. Do you want a date?
  10. ubuntu安装python3.6_Ubuntu16.04下安装python3.6.4详细步骤
  11. android+祖玛游戏源码,Flash祖玛游戏源代码
  12. 编程常用资料/网站收集
  13. 小程序中集成赞赏功能
  14. 移动端页面SEO优化需要注意的10个要点
  15. conv2d() received an invalid combination of arguments问题解决
  16. c语言生成exe文件的作用,c语言怎么生成exe文件
  17. php工程师具备技能,PHP工程师具备的技能及素质
  18. ECCV2022 Workshop | 复杂环境中的多目标跟踪和分割
  19. (OpenCV+Python)--目标跟踪,卡尔曼滤波+鼠标轨迹跟踪
  20. 新版Chrome自动禁用第三方插件的解决办法

热门文章

  1. 函数助手-时间函数-timeShift
  2. 课堂作业--项目文档
  3. vim 显示行号 (Linux)
  4. 互联网基础结构发展的三个阶段及其特点
  5. 常见的短视频拍摄手法分享
  6. php伪原创api对接方法
  7. 活动4组装我的计算机说课稿,《认识计算机》说课稿
  8. 红酒进口报关环节介绍,进口通关时效说明:
  9. 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)
  10. 【Unity3D 问题总结】☀️ | 在Unity Hub中 许可证服务器连接失败 解决方案