视频编解码基础

文章目录

    • 前戏
      • 编解码技术流程
      • 主流视频编码标准
      • 视频传输面临的问题
      • 视频传输差错控制
      • 视频传输Qos质量保证参数
      • 人类视觉系统HVS 以及相应编码措施
    • 正餐
      • 编码层次与码流结构
      • PB帧编码
      • IBBP序列编码结构
      • 图像编码结构
      • 条带编码结构
      • 宏块编码结构
      • 块编码结构
      • 预测技术
      • 码率控制
  • 实例H264

前戏

编解码技术流程

1、预测:

去除空间冗余、时间冗余;

分为帧内预测、帧间预测

2、变换:

从时域变换到频域,去除相邻数据之间的相关性,去除空间冗余,分为:DCT余弦变换、小波变换

3、量化:

去除视觉冗余,通过降低图像质量提高压缩比

4、扫描:

将二位变换量化数据重新组织成一维的数据序列

4、熵编码:

去除编码冗余:变长编码,算术编码,霍夫曼编码

霍夫曼编码可以参考一下:

编解码流程如下:

在这里插入图片描述

主流视频编码标准

  • MPEG-2
  • MPEG-4 Simple Profile
  • H.264/AVC
  • AVS
  • VC-1

视频传输面临的问题

传输系统不可靠:

1、带宽限制

2、信号衰减

3、噪声干扰

4、传输延迟

传输会出现的问题:

1、不能解码出正确的视频

2、视频播放延迟

视频传输差错控制

差错控制解决了视频传输过程中由于数据丢失or延迟导致的问题。

主要技术有:

1、信道编码差错控制技术

2、编码器差错恢复

3、解码器差错隐藏

视频传输Qos质量保证参数

1、数据包的端到端延迟

2、带宽:bit/s

3、数据包的流失率

4、数据包的延迟时间的波动

人类视觉系统HVS 以及相应编码措施

HVS的构成:眼镜、神经、大脑

HVS的特点:

1、对高频信息不敏感

2、对高对比度更敏感

3、对亮度信息比色度信息更敏感

4、对运动信息更敏感

所以数字视频系统的设计应该考虑:

1、丢弃高频信息,只编码低频

2、提高边缘信息的主观质量

3、降低色度的解析度

4、对ROI区域进行特殊处理,如人脸部分

正餐

编码层次与码流结构

1、序列

2、图像组

3、图像

4、条带

5、宏块

6、块

在这里插入图片描述

PB帧编码

当前帧:将要编码的图像

参考帧:预测块所在的图像

前向预测帧(P帧)

在这里插入图片描述

双向预测帧(B帧)

在这里插入图片描述

IBBP序列编码结构

序列:指的是一段连续编码的并具有相同参数的视频图像

序列起始码:指的是转悠的一段比特串,表示一个序列的压缩数据的开始。如MPEG-2的序列起始码为16进制数000001(B3)

序列头:指的是记录序列的信息,包含档次(Profile)、级别(Level)、宽度、高度、是否逐行序列、帧率等内容

序列结束码:指的是一段专有的比特串,标识该序列的压缩数据的结束。如MPEG-2的序列结束码为16进制数000001(B7)

一段视频将有一段序列帧组成

在这里插入图片描述

图像编码结构

包括了:图像、图像起始码、图像头

图像起始码:一段比特串,标识一个图像的压缩数据的开始,如MPEG-2的图像起始码为16进制数000000(00)

图像头:记录图像信息,包含图像编码类型、图像距离、图像编码结构、图像是否为逐行扫描

条带编码结构

条带:多个宏块的组合

条带起始码:专有的一段比特串,标识一个条带的压缩数据的开始。如MPEG-2的条带起始码为16进制数000001(0~AF)

条带头:记录当前的条带相关信息,如:条带位置、条带量化参数、宏块编码技术标识

一个图像会被划分为各个条带

在这里插入图片描述

宏块编码结构

宏块:16*16的像素块

宏块内容:宏块的编码类型、编码模式、参考帧索引、运动矢量信息、宏块编码系数等

块编码结构

1、88或者44的变换量化系数的熵编码数据

2、CBP(code block pattern):用来指示块的变换量化系数是否全为零。

对于YUV(4:2:0)编码,CBP通常为6bit长,每一个bit对应了一个块,当某一块的变换量化系数全为0,其对应的比特位为0,否则为1

3、每个块的变换量化系数的最后用一个EOB(end of block)符号来标识

预测技术

帧内预测,即空间预测,利用当前编码块周围已经重构出来的像素预测当前块

图像编码:I帧

帧间预测,即时间预测,利用时间上相邻图像的相关性来预测

包括:运动估计(Motion Estimation,ME),运动补偿(Motion Compensation,MC)

图像编码:前向预测编码图像(P帧)、双向预测编码图像(B帧)

在这里插入图片描述

码率控制

受到缓冲区、带宽限制,编码码率不能无限制增长,需要通过码率控制将编码码流控制在目标范围内。

一般调整量化参数的手段控制码率:

帧级控制

条带级控制

宏块控制

需要考虑的问题:

1、防止码流有较大波动,导致缓冲区发生溢出

2、同时保持缓冲区尽可能充满,让图像质量尽可能好且稳定

CBR(constant bit rate):比特率稳定,但图像质量变化大。

VBR(variable bit rate):比特率波动大,但是图像质量稳定

码率控制算法分为码率控制和分配,码率控制属于非标准技术,编码端有,解码端没有。

实例H264

H.264是在MPEG-4技术的基础之上建立起来的,其编解码流程主要包括5个部分:帧间和帧内预测、变换和反变换、量化和反量化、环路滤波、熵编码。

H.264与以前的国际标准如H.263和MPEG-4相比,最大的优势体现在以下四个方面:

  • 帧内预测编码

帧内编码用来缩减图像的空间冗余。为了提高H.264帧内编码的效率,在给定帧中充分利用相邻宏块的空间相关性,相邻的宏块通常含有相似的属性。因此,在对一给定宏块编码时,首先可以根据周围的宏块预测(典型的是根据左上角的宏块,因为此宏块已经被编码处理),然后对预测值与实际值的差值进行编码,这样,相对于直接对该帧编码而言,可以大大减小码率。

  • 帧间预测编码

帧间预测编码利用连续帧中的时间冗余来进行运动估计和补偿。H.264的运动补偿支持以往的视频编码标准中的大部分关键特性,而且灵活地添加了更多的功能,除了支持P帧、B帧外,H.264还支持一种新的流间传送帧——SP帧,如图3所示。码流中包含SP帧后,能在有类似内容但有不同码率的码流之间快速切换,同时支持随机接入和快速回放模式。

  • 整数变换

在变换方面,H.264使用了基于4×4像素块的类似于DCT的变换,但使用的是以整数为基础的空间变换,不存在反变换,因为取舍而存在误差的问题。与浮点运算相比,整数DCT变换会引起一些额外的误差,但因为DCT变换后的量化也存在量化误差,与之相比,整数DCT变换引起的量化误差影响并不大。此外,整数DCT变换还具有减少运算量和复杂度,有利于向定点DSP移植的优点。

  • 量化

H.264中可选32种不同的量化步长,这与H.263中有31个量化步长很相似,但是在H.264中,步长是以12.5%的复合率递进的,而不是一个固定常数。

在H.264中,变换系数的读出方式也有两种:之字形(Zigzag)扫描和双扫描。大多数情况下使用简单的之字形扫描;双扫描仅用于使用较小量化级的块内,有助于提高编码效率。

  • 熵编码

视频编码处理的最后一步就是熵编码,在H.264中采用了两种不同的熵编码方法:通用可变长编码(UVLC)和基于文本的自适应二进制算术编码(CABAC)。

在H.263等标准中,根据要编码的数据类型如变换系数、运动矢量等,采用不同的VLC码表。H.264中的UVLC码表提供了一个简单的方法,不管符号表述什么类型的数据,都使用统一变字长编码表。其优点是简单;缺点是单一的码表是从概率统计分布模型得出的,没有考虑编码符号间的相关性,在中高码率时效果不是很好。

因此,H.264中还提供了可选的CABAC方法。算术编码使编码和解码两边都能使用所有句法元素(变换系数、运动矢量)的概率模型。为了提高算术编码的效率,通过内容建模的过程,使基本概率模型能适应随视频帧而改变的统计特性。内容建模提供了编码符号的条件概率估计,利用合适的内容模型,存在于符号间的相关性可以通过选择目前要编码符号邻近的已编码符号的相应概率模型来去除,不同的句法元素通常保持不同的模型。

其优势总结如下:

1.低码率(Low Bit Rate):

和MPEG2和MPEG4 ASP等压缩技术相比,在同等图像质量下,采用H.264技术压缩后的数据量只有MPEG2的1/8,MPEG4的1/3。

2.高质量的图象:

H.264能提供连续、流畅的高质量图象(DVD质量)。

3.容错能力强:

H.264提供了解决在不稳定网络环境下容易发生的丢包等错误的必要工具。

4.网络适应性强:

H.264提供了网络抽象层(Network Abstraction Layer),使得H.264的文件能容易地在不同网络上传输(例如互联网,CDMA,GPRS,WCDMA,CDMA2000等)。

H.264最大的优势是具有很高的数据压缩比率,在同等图像质量的条件下,H.264的压缩比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。举个例子,原始文件的大小如果为88GB,采用MPEG-2压缩标准压缩后变成3.5GB,压缩比为25∶1,而采用H.264压缩标准压缩后变为879MB,从88GB到879MB,H.264的压缩比达到惊人的102∶1。低码率(Low Bit Rate)对H.264的高的压缩比起到了重要的作用,和MPEG-2和MPEG-4 ASP等压缩技术相比,H.264压缩技术将大大节省用户的下载时间和数据流量收费。尤其值得一提的是,H.264在具有高压缩比的同时还拥有高质量流畅的图像,正因为如此,经过H.264压缩的视频数据,在网络传输过程中所需要的带宽更少,也更加经济。

H.264 草案中包含了用于差错消除的工具,便于压缩视频在误码、丢包多发环境中传输,如移动信道或IP信道中传输的健壮性。

为了抵御传输差错,H.264视频流中的时间同步可以通过采用帧内图像刷新来完成,空间同步由条结构编码(slice structured coding)来支持。同时为了便于误码以后的再同步,在一幅图像的视频数据中还提供了一定的重同步点。另外,帧内宏块刷新和多参考宏块允许编码器在决定宏块模式的时候不仅可以考虑编码效率,还可以考虑传输信道的特性。

除了利用量化步长的改变来适应信道码率外,在H.264中,还常利用数据分割的方法来应对信道码率的变化。从总体上说,数据分割的概念就是在编码器中生成具有不同优先级的视频数据以支持网络中的服务质量QoS。例如采用基于语法的数据分割(syntax-based data partitioning)方法,将每帧数据的按其重要性分为几部分,这样允许在缓冲区溢出时丢弃不太重要的信息。还可以采用类似的时间数据分割(temporal data partitioning)方法,通过在P帧和B帧中使用多个参考帧来完成。

在无线通信的应用中可以通过改变每一帧的量化精度或空间/时间分辨率来支持无线信道的大比特率变化。可是,在多播的情况下,要求编码器对变化的各种比特率进行响应是不可能的。因此,不同于MPEG-4中采用的精细分级编码FGS(Fine Granular Scalability)的方法(效率比较低),H.264采用流切换的SP帧来代替分级编码。

H.264已被广泛应用于实时视频应用中,相比以往的方案使得在同等速率下,H.264能够比H.263减小50%的码率。也就是说,用户即使是只利用 384kbit/s的带宽,就可以享受H.263下高达 768kbit/s的高质量视频服务。H.264 不但有助于节省庞大开支,还可以提高资源的使用效率,同时令达到商业质量的实时视频服务拥有更多的潜在客户。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XShell 屏幕锁定的恢复方法(Ctrl+Q)

操作XShell过程中很多时间大家会习惯性的按CtrlS进行保存. CtrlS在XShell的作用是屏幕锁定,很多朋友会无法操作,会直接把窗口关闭。 解决方法: 快捷键 CtrlQ 即能完成解锁!转载于:https://www.cnblogs.com/liangle/p/3173475.html

adb端口被占用

程序不能执行,kill掉任务管理器里面adb服务,重新连接设备仍然有错 查到可能是adb端口被占用 查看adb用的是哪个端口:C:\Users\wanglin>adb nodaemon server 查看谁占用了这个端口:C:\Users\wanglin>netstat -ano | findstr …

实时语音通讯丢包补偿技术

文章目录基于发送端丢包补偿技术原理与媒体无关的前向差错纠正媒体相关前向差错纠正交织技术基于接受端丢包补偿技术基于插入方法基于插值方法基于重构的方法应用建议非交互式交互式拓展阅读参考丢包补偿技术可以分为两类:基于发送端补偿、基于接受端补偿 基于发送…

取得裝置可以顯示頁面的寬度

利用html中的div元素取得<div id"divGetWidth" width100%></div>Jquery:var width$(#divGetWidth).width(); //获取元素宽度 Javascript:var objdocument.getElementById(divGetWidth);var width obj.offsetWidth转载于:https://www.cnblogs.…

Xcode添加静态库以及编译选项配置常见问题

本文转载至 http://www.cnblogs.com/Quains/archive/2013/08/22/3276425.html 一,Xcode编译出现Link错误,出现"duplicate symbols for architecture i386 clang"提示.问题:链接时,项目有重名文件.解决:根据错误提示,做如下检查:1.Taraget->Build Settings->Li…

关于并发概念的一些笔记

目录1、基于锁的并发数据结构1、并发计数器2、懒惰计数器3、并发链表4、并发队列5、并发散列表总结2、条件变量使用&#xff08;POSIX&#xff09;生产者/消费者 &#xff08;有界缓冲区问题&#xff09;覆盖条件扩展3、信号量使用二值信号量&#xff08;锁&#xff09;0值信号…

MYSQL常见出错代码 mysql error number

1016错误&#xff1a;文件无法打开&#xff0c;使用后台修复或者使用phpmyadmin进行修复。1044错误&#xff1a;数据库用户权限不足&#xff0c;请联系空间商解决1045错误&#xff1a;数据库服务器/数据库用户名/数据库名/数据库密码错误&#xff0c;请联系空间商检查帐户。105…

建立apk定时自动打包系统第三篇——代码自动更新、APP自动打包系统

我们的思路是每天下班后团队各成员在指定的时间&#xff08;例如下午18:30&#xff09;之前把各自的代码上传到SVN&#xff0c;然后服务器在指定的时间&#xff08;例如下午18:30&#xff09;更新代码、执行ant 打包命令、最后将apk包存放在指定目录&#xff08;或者上传指定ft…

对于线程并发模型与事件并发模型的思考

这里将以对话的形式进行&#xff1a; A&#xff1a; 普通的线程是可以被其他线程中断掉的&#xff0c;而基于select、epoll的事件处理函数实际上是不可以被其他事件&#xff08;线程&#xff09;中断的。 我这个理解对吗&#xff1f; B&#xff1a; 图片里的应该是对是否…

Cache 总结

这一文&#xff0c;让我们分析一下&#xff0c;《浅谈 Cache》 一文中的奇怪现象&#xff0c;事实上如今来看也并不奇怪了。在什么情况下 r1 和 r2 都为 0 呢&#xff1f;细致看代码&#xff0c;你会发现&#xff0c;两个线程分别被执行在不同的 CPU 核上&#xff0c;而且在线程…

c/c++常见类型转换错误

文章目录char转int 高位符号扩展有符号int与无符号int比较关于一个bit的位域变量的取值范围临时变量溢出size_t死循环char转int 高位符号扩展 int main() {char a 0x9A;int util;util (int)a;cout << a << endl;cout << util << endl;if (util >…

Javascript 装载和执行

一两个月前在淘宝内网里看到一个优化Javascript代码的竞赛&#xff0c;发现有不少的人对Javascript的执行和装载的基础并不懂&#xff0c;所以&#xff0c;从那天起我就想写一篇文章&#xff0c;但一直耽搁了。 首先&#xff0c;我想说一下Javascript的装载和执行。通常来说&am…

java sundry tips

1.关于Arrays 记得binarySearch方法返回的int 类型的数值的含义。 If the array contains multiple elements with the specified value, there is no guarantee which one will be found. 而且当查找数小于数组中任何一个数时返回-1 &#xff0c;当查找数大于数组中任何…

c++常见的10个类对象问题

文章目录1、对象的浅复制2、构造函数中的操作符重载3、拷贝构造函数不能模板化4、析构函数未捕获异常导致coredump5、构造函数抛出异常6、基类析构函数非虚导致内存泄漏7、删除void*指针引发内存泄露8、成员函数尾部缺失const9、使用memset初始化class10、对象向下转换失败1、对…

Ubuntu 14.10 -- 异次元软件世界

Ubuntu 14.10 中文桌面版/服务器正式版下载 - 华丽免费易于入门的 Linux 操作系统 [ 系统工具 - Linux // 2014-10-25 ]一说到 Linux&#xff0c;就不得不提目前最红火的 Ubuntu 发行版了&#xff01;它拥有绚丽的界面&#xff0c;甚至跟以时尚为卖点的 Mac OSX 相比也有过之而…

maven 概念

这里maven倡导约定优于配置&#xff0c;maven的约定就是以下目录结构src/main/java 下存放java类src/main/webapp 下存放页面文件(需要手动创建)src/main/resources 下存放资源文件src/test/java 下存放单元测试代码src/test/resources 下存放测试资源文件 Maven运行的生命周期…

System Design笔记:在线售票系统设计

文章目录何为在线售票系统&#xff1f;系统目标和要求1、功能要求2、非功能性需求3、设计注意事项4、容量估算5、系统API1.SearchMovies2.ReserveSeats6、数据库设计7、高级设计8、细节模块设计9、流程服务器如何跟踪所有尚未预订的active预订&#xff1f;服务器如何跟踪所有等…

Response.Write具体介绍

问题一&#xff1a; Response.Write 后连接Response.Redirect &#xff0c;则Response.Write无法显示&#xff0c;直接跳转入Response.Redirect 的页面。 解决方案&#xff1a; Response.Write("<script langugejavascript>alert(成功改动); window.location.hrefin…

SharePoint通过IP地址访问

问题&#xff1a;SP站点通过计算机名称可以访问&#xff0c;但不能通过IP地址访问 解决方案&#xff1a;打开SharePoint2010管理中心》应用程序管理》配置备用访问映射》编辑公用 URL 备用访问映射集&#xff1a;选择要映射的网站集 默认:http://计算机名 Intranet &#xff1a…

公有云与私有云的差别(转)

公有云与私有云的差别 发现每一个公司对私有云、公有云的定义都不一样&#xff0c;能够从公有云与私有云的差别上理解这个概念。下面转载网络上一个比較浅显的解释&#xff1a; 差别1&#xff1a;从云的建设地点划分&#xff0c;公有云——互联网上公布的云计算服务&#xff1b…