【一种H.264的码率控制算法的音视频编解码系统设计案例6200字】_第1页
【一种H.264的码率控制算法的音视频编解码系统设计案例6200字】_第2页
【一种H.264的码率控制算法的音视频编解码系统设计案例6200字】_第3页
【一种H.264的码率控制算法的音视频编解码系统设计案例6200字】_第4页
【一种H.264的码率控制算法的音视频编解码系统设计案例6200字】_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一种H.264的码率控制算法的音视频编解码系统设计案例目录TOC\o"1-3"\h\u22136一种H.264的码率控制算法的音视频编解码系统设计案例 1237411.1系统技术方案 139731.2SoC芯片的选型 4297181.3降低时延的编码优化算法 598791.1.1QP调整 5106631.1.2编码模型优化 6243721.1.3传输码率设置 658901.1.4时延与I帧控制 7266571.4.5提高组帧速率 7177551.1.6编码时延分析 8198041.4传输带宽系统优化设计 9250831.4.1低码率的编码控制 9151451.4.2网络传输优化 9214291.5降低丢包误码率优化算法 1087651.5.1数据差错控制 1083991.5.2FEC算法纠错过程 1137241.6所需仪器和工具软件 11207761.7系统的技术指标 13197881.8小结 131.1系统技术方案本系统主要由三部分构成:1)高清图像的采集系统。2)高清图像的编码和传输。3)高清图像的解码显示和存储。系统框图如图3-1所示如下:图3-1编解码系统设计框图系统实物连接图如图3-2所示:图3-2系统实物连接图图3-2中展示了整个系统的大致流程:摄像头采集视频模拟数据给编码板AD转换,实现编码参数的配置和H.264编码,然后组帧成UDP报文发送给解码板,大致功能如图3-3所示:图3-3编码板主要功能流程解码板主要功能流程跟编码相反,首先解析视频帧然后进行H.264解码,然后进行DA转换,最后输出给显示器。这是作为系统的主体流程。为了调试带宽找到最优码率配置,编码板需要和PC串口和网口连接,然后运行带宽调试上位机软件调试带宽。为了在接收端统计丢帧和误码率,解码板需要和PC网口连接,运行丢帧误码率统计上位机软件,从而实现丢帧和误码率的统计。该系统设计分四个模块。下面大致说明各模块关系。1)编码板和解码板的硬件设计该部分设计具体将在第四章详细介绍。其中编码板把摄像头采集的模拟视频数据进行AD转换然后进行H.264编码,然后解码板把接受到的编码后的视频数据H.264解码,然后给显示器播放。2)编码板和解码板嵌入式程序设计该程序是视频编解码的主要程序,实现原始视频的H.264编解码并网络传输。该嵌入式程序涉及到编解码版驱动移植、码率控制方式的选择、网络传输、Linux系统的移植和开发(U-boot、Linux内核、文件系统)、Linux系统应用程序开发等。3)带宽调试上位机软件设计该上位机软件实现系统运行前期配置开发板嵌入式编码程序的编码参数,且实现视频数据实时带宽统计。从而调试期方便测试传输带宽,实现最优码率参数的设置。4)视频丢帧误码率上位机软件设计该上位机主要功能是统计视频数据传输过程中的丢帧率和误码率。摄像头采集的原始视频数据传送给编码板进行AD转换然后H.264编码。然后通过网络传输(UDP)给上位机软件。上位机软件根据丢帧统计算法和误码率统计计算出实时丢帧误码率和总体丢帧误码率并以波形的形式呈现出来,同时利用FFmpeg[15]解码播放,通过视频播放质量进一步验证丢帧误码情况。1.2SoC芯片的选型在绪论章节可以看出,相对于软编码来说,硬编码更加适合视频实时传输系统,于是本课题系统采用硬编码的编码方式。因此涉及编解码SoC芯片的选择,根据行业了解、网上查阅,目前有关视频编解码的SoC芯片种类很多,如:TI推出的DM6467芯片、Techwell推出的1080PDVR芯片、NXP推出的PNX1700芯片、升迈科技推出的GM8180[16]芯片等等。最后因海思芯片在视频编解码方面有着很多优势(如:编解码速率快、支持H.264编解码、多种码率控制方式可选、提供丰富的SDK、提供Demo板等),而且海思平台对上层的应用程序屏蔽了芯片的复杂底层,上层应用程序直接调用底层MPI(MPP(MediaProcessPlatform)ProgrameInterface)接口实现各种功能需求。从而可快速实现输入视频源的捕获、H.264编码和解码以及输出等功能开发,提高开发效率。所以本次课题最终选择了海思Hi3521A芯片作为编解码的SoC主芯片。其功能框图如图3-4所示:图3-4Hi3521A芯片功能框图从图3-4中可知,Hi3521A内置一个带有两级缓存(L1和L2)的ARMA7处理器,以及高性能的H.264视频编解码引擎。同时集成了丰富外围接口,如:DDR3、Video输入、网络、USB、Audio输入、Flash等。提供了HDMI/VGA/CVBS视频高清显示输出接口[17]。Hi3521A芯片强大的H.264编解码引擎使得视频硬编码速率快,丰富的SDK开发包有利于设计高效的嵌入式编解码程序和提高数据组包速率。以上这些都为缩短整个传输系统的时延发挥重要作用,因此使得海思Hi3521A芯片成为本次课题设计的最佳选择。1.3降低时延的编码优化算法为了满足系统视频传输实时性,需要使系统达到降低时延视频传输,用以适应环境下得带宽要求[18]。系统码率控制方式有两种:动态码率(VBR,variablebitrate)控制和固定码率(CBR,constantbitrate)控制,其中VBR可根据视频内容动态调整比特率,而CBR表示在一个比较恒定比特率的情况编码传输。本课题根据需求采用VBR的码率控制方式。其算法流程如图3-5所示:图3-5低延时编码控制1.1.1QP调整各个宏块进行QP(量化步长)调整时,需要用到亮度值(dc)、宏块的高频值(hf)、运动(mot)和运动边沿(edge)这些值。QP最终均方差用来调整QP值:编码时编码器对每帧数据写入三个初始值MBavg,a/b,b/a。QP平均值(MBavg)会自动更新,宏块因数为:(MB>MBavg)(3-1)其中a和b分别是通过2比特整数和4比特小数表示的初始因子,式3-1得到的是当MB(宏块)QP值大于平均宏块QP值时的宏块量化因数。同理,当MB(宏块)QP值小于平均宏块QP值时,便得到式3-2所示的宏块量化因数。(MB<MBavg)(3-2)按照3-1和3-2式的方法分别求出宏块的运动(mot)因素,宏块的高频(hf),宏块的运动边沿(edge)和宏块的亮度平均值(dc)。最后根据以上求出的因数调整QP,调整为如3-3式所示:(3-3)1.1.2编码模型优化目前主流的码率控制方式有CBR、VBR和CVBR。不同的码率控制方式会使得编码的数据量和数据波动不同。为了实现稳定的低带宽传输,必须对不同码率控制方式之间进行比较和选择。下面介绍下H.264编码涉及到的码率控制方式。可以试想一下,在同样的编码方式和参数下,码流越大,包含的信息越多,对应的图像越清晰,反之亦然。其中CBR(ConstantBitRate)是恒定比特率,VBR(VariableBitRate)动态比特率,CVBR(ConstrainedVariableBitRate)。首先来看看VBR(动态比特率)工作原理。所谓动态比特率就是可以通过算法来根据图像内容的运动和静止来动态改变GOP的值,从而实现视频传输过程中根据视频动静内容动态改变码流,从而确保视频图像的编码过程中的质量,但是带宽会随之波动。CBR(恒定比特率)相比VBR相反,CBR码流控制方式使得数据传输带宽和码流都不变,所以当图像运动产生的数据量超过码流承受能力时,图像便会失真(如出现边缘模糊现象),虽然有这样的缺点,但是CBR控制方式的优点是恒定带宽。而CVBR鉴于CBR和VBR两者之间。编码宏块可以根据不同实际需求划分为:16x16,16x8,8x16,8x8,8x4,4x8,4x4七种像素块,如图2-3所示。同时,在高分辨率图像编码中,熵编码采用CABAC[21]可以进一步提高编码效率增益。因此经过研究和权衡,在本系统编码中使用前4种像素宏块(16x16,16x8,8x16,8x8)进行预测。1.1.3传输码率设置码率就是单位时间里数据传输的位数。码率又被称为比特率(Bitrate),指数据每秒传输的比特数(单位bps),每秒读取bit数越多,视频播放画质越高。因此码率大小与编码压缩率成反比,与视频图像质量成正比。即编码码率越小,压缩率越高,视频图像质量越差,反之亦然。另一方面,码率不是越大对视频编码质量越好,码率大小超过一定值时,对视频图像质量的改善没有多少影响。以上可知,编码码率大小直接影响编码压缩程度。而不同程度的编码压缩率将影响编码数据量和网络传输带宽大小。因此在控制视频网络传输带宽方面,对编码码率值的设定尤为重要。设定码率大小需对带宽大小和视频编码质量之间综合考虑。为了实现系统低带宽传输和较高视频编码质量,经过带宽调试上位机软件测试后,确定了本系统编码码率大小为1300。1.1.4时延与I帧控制结合传输码率和时延,在传输码率2Mb/s条件下,帧率为30f/s,GOP长度为15时,GOP(GroupofPicture)结构采用IPPPP。在时延time=0.5s时帧数为num=15帧。那I帧占10/24,14个P帧占14/24。在传输码率设置为2Mb/s的情况下可传输1Mb数据,那么I帧最大可以为式3-4所示值:(3-4)低时延时,时延time=0.133s,num=4帧。I帧占10/13,那么I帧最大应为式3-5所示值:(3-5)对比结果如表3-1所示:表3-1目标时延和I帧的关系时延帧数传输数据I帧比例P帧比例最大I帧0.5s151Mb10/2414/24416Kb0.133s4276kb10/133/13205Kb从表可知,显然在I帧和P帧的数据量比例固定情况下,低延时要求的I帧数据量是高延时的一半。由于I帧的大小远超P帧,因此减小I帧的数据大小就可以明显降低时延。1.4.5提高组帧速率系统嵌入式软件部分产生传输时延的地方包括编码、组包、拆包、解码。而这些因素在设计嵌入式编解码程序时所必须考虑的。所以为了降低系统时延,精心设计运行于硬件开发板上的嵌入式编解码程序是很有必要的。现提出提高嵌入式程序编解码速率的机制有如下方面:1)缓冲池机制。发送端视频采集到编码和接受端视频接收到解码都存在一个处理时间差。为了保证采集和接收的实时性,采用缓冲池机制可以起到调节缓存的作用。2)回调函数机制。所谓回调函数就是在程序设计中不是由实现方直接调用,而是在特定条件或事件下由另外一方调用,从而实现对某个条件或事件的响应。这样对嵌入式程序对视频采集和编码事件能做出及时的响应处理。3)多线程机制。指从软件上实现多个任务并发执行的技术。通过采用多线程的方式可以实现视频采集、视频编码、编码数据组帧多个任务并发进行,从而提高嵌入式程序的效率。接下来从组帧的方面考虑降低时延。所谓组帧就是把编码后视频数据按照自定义的帧格式组成网络传输数据包的过程。数据帧识别度和组帧复杂程度是正相关的,而组帧速率和组帧复杂程度是负相关的。所以在组帧过程中应保证在数据帧能识别的前提下,组帧尽可能的简单,这样才能提升组帧速率,从而提高系统整体时延。综上所述,本课题视频传输采用如图3-6示意图组帧:图3-6组帧示意图由图3-6可知,帧头采用12字节标识。第13个字节是帧类型标识符,其中值0x01表示I帧,0x02表示P帧。接下来的三个字节用来表示该帧中包含的视频数据大小。再之后的1个字节用来表示整个UDP包中包含的帧数值。其余后面字节用来存放视频数据,存放的数据量大小由上面提到的表示视频数据大小的3个字节决定。1.1.6编码时延分析系统传输时延的大小精确到ms级,所以测量时需讲究一定的方式方法。有些方法对于秒级测量可行,但对于ms级测量是错误的或不精确的。如:1)徒手读秒法。这种做法误差很大,测试中会发现1s时间在视频编码中比我们想象中的长。2)北京时间对比法。测量两端同时打开互联网北京时间,视频传输播放过程中对比两端时间差,因为北京时间的精度有0~999ms的误差,所以该放方法也存在很大误差。3)播放器缓存法。大部分视频传输系统延时测量会使用VLC或FFMpeg等通用播放器。但这些通用播放器为了使视频播放平滑,会在播放器内部设置较长缓冲时间。比如VLC默认设置1000ms的缓冲时间。以上三种都不是精确测量方法。要精准测量需要做到以下三方面要求:1)精准到毫秒2)统一的计时器3)同步发送端时间和接收端时间基于以上要求,该系统延时测量的做法是,利用两台PC机,PC1连接发送端,PC2连接接收端。PC1的测试视频经过发送端编码,接收端解码后的视频给PC2播放。两端同时分别开启一个毫秒计时器。两端视频屏幕截图,经过对比找出某个画面同时出现在两端截图的时候,然后通过计算两端计时器时间差便可得到准确的测量。1.4传输带宽系统优化设计1.4.1低码率的编码控制由于传输信道带宽限制,首先需要对信源编码进行优化,从而控制编码码率,在尽可能少的压缩数据的同时保证图像的质量。码率控制流程图如图3-7所示。图3-7码率控制流程图1.4.2网络传输优化网络层数据传输采用TCP/IP协议栈实现传输,网络稳定时,UDP实现简单易行,因为UDP不需要像TCP一样三次握手建立连接,且UDP报文头只含8byte数据,而TCP报文头包含20byte,所以采用UDP根据节约数据量。同时在网络带宽受限的情况下,采用双CDMA卡进行传输,即用两路路由负载均衡的形式传输。两路信道负载[26]传输模型如图3-8所示:图3-8双路信道发送数据但是两路负载均衡会引入一个新的问题,即在UDP收到包后发送个两路路由是会出现包乱序现象,如图3-9所示:图3-9数量包乱序解决办法是利用实时传输协议RTP(Real-TimeTransportProtocol)[27]数据封装发送,然后把时间戳添加到封包中,接受端接受到后根据时间戳重新包排序便可解决这个问题,RTP封包示意图如图3-10所示。图3-10RTP封包示意1.5降低丢包误码率优化算法当网络环境稳定时,出现丢包误码的几率很低,但在一些网络环境差,比如一些信号不好的无线网络时,便会出现大量丢包和误码的现象,为了在该情况下降低丢包误码率,下面提出数据差错控制方法和FEC算法纠错降低丢包误码的方案。1.5.1数据差错控制为了解决码率问题,本文提出FEC算法[30](ForwardErrorCorrection)和重传请求ARQ(AutoRepeatQuest)[31]两种机制。FEC过程如图3-12所示。图3-12FEC算法纠错过程FEC纠错不要求反馈通道,单向传输的系统尤其适合。它的优势在于满足低时延、实时性要求。缺点便是译码时相对复杂,会增加传输的数据量,冗余数据在发送时要占据一定带宽,增加了网络负担。1.5.2FEC算法纠错过程在纠错编码中,用多项式表示二进制数字序列。比如二进制码11011010可以表示为式3-7所示:(3-7)其中xi表示bit数的相应位置,ai表示bit数的相应值,取值为0或1,则M(x)称为信息多项式。通过这样的多项式矩阵运算,可实现对bit数的变换编码和解码。常见的纠错码包括汉明码,BCH码,RS码等。本课题系统采用了RS(Reed-Solomon)码[32]实现FEC,RS码是定义在GF域(Galoisfield,伽罗华域)的线性码,也是一种改进的BCH码。其对数据丢包有着很好纠错能力。如果采用RS(n,k)来描述此算法,则RS码纠错能力是(n-k)/2个数据量,如果在知道了差错位置的情况下,纠错能力便是(n-k)个数据,其中n是编码后的总数据包个数,则k代表原始数据包个数[32]。1.6所需仪器和工具软件根据系统方案,本课题项目除需求相关芯片外,还需要一些仪器和工具软件:1)PC机。该PC机使用Windows7即以上系统,并且安装Linux系统的虚拟机。其中虚拟平台使用VMwareWorkstation12软件,Linux系统使用Ubuntu16.0.5系统软件。还需安装SouceInsight用于代码的编辑。2)USB转串口线。USB转串口即PC端USB接口到开发板通用串口的接口转换。主要用于前期开发和调试阶段实现PC机和编解码板的接口连接。以及实现PC机到板子之间烧写U-boot、Linux内核、文件系统以及嵌入式应用程序的烧写和测试。USB转串口线的实物如图3-14所示:图3-14USB转串口线实物3)摄像头。摄像头连接编码板,主要作为视频源,摄像头采集的视频数据给编码板AD转换和编码。市面上大部分摄像头都适合本系统。本课题使用的摄像头实物如图3-15所示:图3-15本课题摄像头实物4)显示器。显示器连接解码

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论