H264错误隐藏分析
HEVC帧内预测模式和分组码的视频信息隐藏-王家骥++
HEVC帧内预测模式和分组码的视频信息隐藏_王家骥211为了在最新的视频压缩标准-高效视频编码(摘要:下实现信息隐藏并在保证隐秘信息嵌HEVC)入容量的前提下减少对宿主信息的修改,提出基于帧内预测模式和分组码的HEVC视频信息隐藏方法。
首先,利用分组码的标准阵列译码方法,建立(码标准阵列译表;然后,根据译码表4,3)与预测模式的映射关系,调制帧内4×4亮度块的预测模式嵌入隐秘信息;对调制后的4×4最后,使得在连续4个4×4帧内亮度块嵌入3b平均修改1.亮度块重新编码,it隐秘信息,25位预测模式,减小因调制预测模式对视频造成的影响。
实验结果表明:所提算法的PSNR值下降在0.05码率增长在1%左右,算法能很好的保证视频主客观质量,对视频的编码比特率影响以内,dB很小。
;分组码关键词:信息隐藏;高效视频编码(帧内预测;HEVC)()中图分类号:TA文章编号:1P3910050862015059429000文献标识码:---VideoinformationhidininintraredictionandblockcodesforgpHEVC*,W,,iWdLANGJiaANGRaninIWeiXUDaenXUJian---wjgg,,,),(Ninbo315211ChinaNinboUniversitKCSoftwareLaboratorCggyy,:AtoreducethemodificationofhostforhihefficaacitembeddinbstractAttheremiseofensurin-gpygpg,)whichisthelatestvideocomressionstandard,aninHEVCinformationhidinvideocodiniencc-pgg(yalorithmforHEVCbasedonintraredictionandblockcodesisroosed.Inthefirstormationhidinfgpppg,,)tablewiththerincileofthestandardarra.Thendecodinlaceweestablisha(43standardarrappygpybetweenthetothemaintheintraredictionmodesin4×4luminanceblocksaccordinwemodifppgpgy,rematrixandtheredictionmode.Finallencodethechanedblockwiththesubstitutiverediction-pygp1.25predictionmode.Itmakesthatfour4×4luminanceblocksembed3bitinformationandmodify,modesonaveraewhichreducestheimactoftheredictionmodemodulationontheualitofthevid-gppqyo.Exerimentalresultsshowthatthebitateincreasesbabout1%andtheeaksinalooiseratioertn---pypg()PSNRlossisustabout0.05dB.Theroosedhidinalorithmcaneffectivelembedinformationjppggywithlittleinfluenceonthebitrateandualitofthecovervideo.-qy;:;();iKewordsinformationhidinhihefficiencvideocodinHEVCntraredictionblockcodepggygy1引言随着数字化多媒体信息应用和传播的普及,1〕。
【知识点】H264,H265硬件编解码基础及码流分析
【知识点】H264,H265硬件编解码基础及码流分析前⾔⾳视频开发需要你懂得⾳视频中⼀些基本概念,针对编解码⽽⾔,我们必须提前懂得编解码器的⼀些特性,码流的结构,码流中⼀些重要信息如sps,pps,vps,start code以及基本的⼯作原理,⽽⼤多同学都只是⼀知半解,所以导致代码中的部分内容虽可以简单理解却不知其意,所以,在这⾥总结出了当前主流的H.264,H.265编码相关的原理,以供学习.1. 概览1.1. 为什么要编码众所周知,视频数据原始体积是巨⼤的,以720P 30fps的视频为例,⼀个像素⼤约3个字节,如下所得,每秒钟产⽣87MB,这样计算可得⼀分钟就将产⽣5.22GB。
数据量/每秒=1280*720*33*3/1024/1024=87MB因此,像这样体积重⼤的视频是⽆法在⽹络中直接传输的.⽽视频编码技术也就因运⽽⽣.关于视频编码原理的技术可以参考本⼈其他⽂章,这⾥不做过多描述.1.2. 编码技术经过很多年的开发迭代,已经有很多⼤⽜实现了视频编码技术,其中最主流的有H.264编码,以及新⼀代的H.265编码,⾕歌也开发了VP8,VP9编码技术.对移动端⽽⾔,苹果内部已经实现了如H.264,H.265编码,我们需要使⽤苹果提供的VideoToolbox框架来实现它.1.3. 编码分类软件编码(简称软编):使⽤CPU进⾏编码。
硬件编码(简称硬编):不使⽤CPU进⾏编码,使⽤显卡GPU,专⽤的DSP、FPGA、ASIC芯⽚等硬件进⾏编码。
优缺点软编:实现直接、简单,参数调整⽅便,升级易,但CPU负载重,性能较硬编码低,低码率下质量通常⽐硬编码要好⼀点。
硬编:性能⾼,低码率下通常质量低于硬编码器,但部分产品在GPU硬件平台移植了优秀的软编码算法(如X264)的,质量基本等同于软编码。
iOS系统中的硬编码苹果在iOS 8.0系统之前,没有开放系统的硬件编码解码功能,不过Mac OS系统⼀直有,被称为Video ToolBox的框架来处理硬件的编码和解码,终于在iOS 8.0后,苹果将该框架引⼊iOS系统。
基于H.264的信息隐藏技术研究
河南科技Journal of Henan Science and Technology总561期第4期2015年4月Vol.561,No.4Apr ,2015收稿日期:2015-3-18作者简介:薛莹莹(1982-),女,硕士,助理工程师,研究方向:信息安全。
,摘要:随着网络通信、多媒体技术和视频图像压缩编码等技术的蓬勃发展,信息安全已经与人们的工作和生活息息相关。
作为保证信息安全传递的有效方法,视频信息隐藏技术引起了人们极大的关注。
本文基于广泛应用的H.264视频压缩标准,开展了视频信息隐藏技术的深入研究。
关键词:信息隐藏;H.264;鲁棒性中图分类号:TN919文献标识码:A文章编号:1003-5168(2015)04-0019-3Research on the Information Hiding Technology Based on H.264Xue Yingying(Henan Museum ,Zhengzhou Henan ,450002)Abstract:With the rapid development of network communications ,multimedia technology,video and image compres ⁃sion and coding technology and so on ,information security has been closely linked to people's work and life.As an ef ⁃fective method to ensure the information security ,video information hiding technology has aroused people's extensiveattention.Based on the widely used H.264video compression standard ,the paper studied the video information hid ⁃ing technology in depth.Keywords:information hiding;H.264;robustness目前,人类社会正处于信息时代,互联网作为全球最大的信息发布系统,是人们获取信息不可或缺的途径之一,但与此同时,也面临着信息安全问题的巨大挑战。
h264检测是I帧还是P帧,解决录像第一帧有马赛克问题
h264检测是I帧还是P帧,解决录像第一帧有马赛克问题最近使用h264码流数据进行录像,但是录出来的第一帧有马赛克,究其原因是录像的第一帧不是关键帧,所以需要录像是需要判断第一帧是否是关键帧,方法有两种,第一种是原码流的基础上查找,第二种是将原码流传递给ffmpeg让ffmpeg判断key_frame,第二种相对简单,但是由于这样一来录像和解码视频切合的太紧密,之后修改比较麻烦,所以选择第一种方案,查看注释1可以明白如何检测h264码流的关键帧,下面是我截取原码流的关键帧和p帧0000000 :是sps0000000 : 是pps0000000 : 是帧类型关键帧类型:1.<span style="color:#FF0000;"><span style="font-size:24px;">0000000: <span style="color:#CCCCCC;">0000 0001 6742 401f 9654 0501 ed00 f39e ....gB@..T......2.0000010: a</span><span style="color:#3366FF;">000 0000 0168 ce3880</span>00 0000 01<span style="color:#000000;">65</span> 8880 .....h.8.....e..3.0000020: 4001 8231 2000 4f11 d84d 5fff fb3b c28a @..1 .O..M_..;..4.0000030: 00bc fc83 03db b3e3 8603 9c59 fa0f a82c ...........Y...,5.0000040: df55 fdf6 8414 032a e766 bd4b fbea 05af .U.....*.f.K....</span>6.</span>P帧类型:1.0000000: <span style="color:#C0C0C0;">0000 0001 6742 401f 9654 0501 ed00 f39e ....gB@..T......2.0000010: a</span><span style="color:#3366FF;">000 0000 0168 ce3880</span>00 0000 01<span style="color:#000000;">41</span> 9a02 .....h.8.....A..3.0000020: 0586 7cb9 9125 5788 8f90 7f1f 1930 7eef ..|..%W......0~.4.0000030: 6383 bebd 2cc5 3627 92c3 390b 46dc d4a5 c...,.6'..9.F...5.0000040: 774b 3484 57f8 9840 fba3 1dd6 800f 2242 wK4.W..@......"B6.0000050: 8816 080f 8f8d 84c6 09aa cda6 363d 00da ............6=..7.0000060: b563 4392 bc65 93e2 63bb 6d30 472e 3ef1 .cC..e..c.m0G.>.8.0000070: 545d 6a3f 36c3 2f7d 6b1e 3c91 d15d d687 T]j?6./}k.<..]..所以在代码中需要检索第29个字节,来判断是65还是41,1.public static String byteToHexString(byte src){2. StringBuilder stringBuilder = new StringBuilder("");3. int v = src & 0xFF;4. String hv = Integer.toHexString(v);5.if (hv.length() < 2) {6. stringBuilder.append(0);7. }8. stringBuilder.append(hv);9.return stringBuilder.toString();10. }11.p rivate boolean isFirstIFrame = true;12.p rivate String IFrame = "65";//关键帧是0x6513.//<span style="font-size:16px"></span>bArrayImage是存放h264原码流字节数组14.i f (是在录像) {15.if (isFirstIFrame) {16. String type = byteToHexString(bArrayImage[29]);17.if (type.equals(IFrame)) { //第29个字符是判断帧的类型18. isFirstIFrame = false;19. ShootingVideoData(bArrayImage, Video_Data_iVideoLen);//录制第一帧:关键帧20. }21. }else {22. ShootingVideoData(bArrayImage, Video_Data_iVideoLen);23. }24. }这样在录制出的第一帧录像就没有马赛克了。
H.264/AVC视频容错传输的菱形FMO分布方法
作者简介 : . . af z 17 一) 男 , s z M h o( 9 7 , 博士研究生 , o 主要研究方向 : 视频压缩 , 以及交互技术。 通信 ・ 通讯作者 : 波 (98 , , 胡 16 一)男 教授 , 士生导师 , E 博 I E成员。E a 120207 aa.d.n E m l 11701@f n euc : d
1 传 统 的 模 式
在 H.6/ V 2 4 A C的 F MO允许 不 同模式 的规格把 宏块 映射 到不 同 的条带 组 。在 F O检查 板顺 序 的块排 M 序打破 了邻近块之间的预测 , 但是这样 的方案需要成本且会减少编码效率 。在 [ ] 关于 F O的额外开 7 中, M 销估计和它改进 的误差恢复技术 已经细致地阐述过了。这种 H 24 A C的 F O模式 由下述式 子产生了 .6/ V M 分散 模 式 []= a ( n / ) %( ) i ( +( b )2 ) n () i 其中 i 是宏块的地址存在于 a列) b 行)n ( 和 ( , 是条带组的数 目。步骤是在帧中将条带组赋到每一个宏块。这样 的函数在编码器和译码器都可以得到。这样的模式提供了分散的排序 , 这样不会有宏块是被其他来 自同样条带 组的宏块包围。对于 Q I CF大小的有 8 个条带组的帧模式如图 1 所示。相同的模式在所有不同的分辨率所示, 并
・
12・ O
绵 阳师范 学院学报 ( 自然科 学版 )
第3 0卷
且知道条带组的数目 改变才会改变。现在当前的模式缺少一些对于整个帧的分散的 误差的特征以防万一 一 整条 关键 的条带组丢失 。在列 中有条带组对 (,)( ,)( ,)( ,) 04 ,15 ,26 ,37 。如果有任何一对丢失 , 结果误差将在有限 区 域的列方向累计, 如图 1 1 ) 中(, 对所示( 5 灰色区域) 。在这样的条件下, 总会存在概率使用最大的两个可得到的 宏块进行隐蔽, 在水平方向上邻近于丢失的宏块。而且, 如果—个条带组邻近于丢失的对也丢失了这样的情况就 会变得更糟 。对随着条带组数 目改变的对和无法改变的在几乎所有的模式存在 。 在文献 [0 中, 1] 一个优 良的模式的特性已经介绍过了并且用拉丁方块的概念引入了另一个分离模式。 作 者展 示 了对 于在 MB m p中一个 鲁棒模 式 的要求包 括 ; A a ( ) 条带 组 中保 持大 致相 同数 目的宏块 1在 () 2 对于一个宏块避免相同的组带作为四个方向上的邻居 () 3 尽可能提供邻近宏块不同的条带组作为相邻 ( ) MB ma 4在 A p中尽可 能引入 最大 不 同的邻 居对 他们的评价显示这样的映射帮助更好的隐藏并胜过了以前常见的模式。我们在余下的本文中称这种 模式是拉丁方块模式 (S ) L P 。在图 2中显示了7个条带组的模式 , 使用拉丁方块要求用不 同的条带组数 目 构建不同的等式。一些长而且复杂的等式的结果 , 并且当条带组数 目是 7或者 8时, 没有定义的函数 或者 等式产生这样的分离模式 。即使手动安排的模式( 如图2 所示) M A a 在 B m p的某些位置上( 灰色区域) 也不 满 足第 三条性 质 。
H264码流解析及NALU
H264码流解析及NALU639 /* bitstream filters */640 REGISTER_BSF(AAC_ADTSTOASC, aac_adtstoasc);641 REGISTER_BSF(CHOMP, chomp);642 REGISTER_BSF(DUMP_EXTRADATA, dump_extradata);643 REGISTER_BSF(H264_MP4TOANNEXB, h264_mp4toannexb);644 REGISTER_BSF(HEVC_MP4TOANNEXB, hevc_mp4toannexb);645 REGISTER_BSF(IMX_DUMP_HEADER, imx_dump_header);646 REGISTER_BSF(MJPEG2JPEG, mjpeg2jpeg);647 REGISTER_BSF(MJPEGA_DUMP_HEADER, mjpega_dump_header);648 REGISTER_BSF(MP3_HEADER_DECOMPRESS, mp3_header_decompress);649 REGISTER_BSF(MPEG4_UNPACK_BFRAMES, mpeg4_unpack_bframes);650 REGISTER_BSF(MOV2TEXTSUB, mov2textsub);651 REGISTER_BSF(NOISE, noise);652 REGISTER_BSF(REMOVE_EXTRADATA, remove_extradata);653 REGISTER_BSF(TEXT2MOVSUB, text2movsub);H264码流的NAL起始字节分析这是⼀段H264码流,00 00 00 01这是对应forbidden_zero_bit的f(1),接着后⾯的nal_ref_idc的u(2),这个怎么解呀,有点晕。
AVCON常见问题分析及处理
果A网络用户对A网卡的IP进行访问, 那么返回的信息也应该从A网卡传回.
常快速的通讯
高清视频基础知识
高清视频: HDTV (High Definition Television) 即 高清晰度电视,它采用数字信号传输,即从视频的 采集、制作到传输,以及到用户终端的接收全部 实现数字化,因而高清视频能提供更高的清晰度.
符合高清视频分辨率规格: 720P(1280x720)、 1080i(1920x1080)、1080P(1920x1080). i为隔 行扫描,P为逐行扫描
•DVI-D: DVI-Digital接口只能接收数字信号
•DVI-I: DVI-Integrated,可同时兼容模拟和数 字信号.可通过DVI转VGA接口输出模拟信号
故障处理: 1、如果没有技术在现场建议直接返回公司维修, 2、如果有技术在现场,可以动机器的话建议由本公司技术打开机箱检
查一下机器,确认机器内部有无螺丝脱落等异物造成的短路或者控 制线脱等;现场看是否能够解决,如果未能解决一定要原样装好返 回公司进行维修。
二、开机上电无显示
故障现象:按下设备电源开关后设备通电运行,但是没有信号输出 、屏幕无显示。该类故障的定性一定要注意排除外接显示的故障, 如果显示器正常,输出模式选择正确的情况下仍无输出,即可判断 为开机上电无显示。
像素 25,344 101,376 405,504 921,600 2,073,600
H.264中的一些问题总结
H.264中的一些问题总结在H.264中衡量失真(distortion)的方法主要有:SAD,SATD和SSD三种方法,即:这三种失真计算方法使用的场合是不一样的.(1)SAD/SATD主要用于在帧间预测中, 进行运动搜索的时候,计算块匹配之间的代价的时候,在进行模式选择的时候, 使用的是SAD, 或者SATD(2) SSD 计算的失真比较精确, 主要是在真正的编码过程中所使用的. 在进行模式选择的时候, 如何使用RDO的话, 也要计算SSD(3)对于整象素点的 MV 搜索,Distortion 采用 SAD,对于亚(分数)象素点的 MV 搜索,Distortion 采用 SATD。
H.264编码后码流的生成H.264 比较全的编码框架H.264中的ASO与FMOASO指的是片在传输时的先后顺序可以随意变化, 而FMo是指在一帧图像中宏块的属于不同的片的次序比较灵活H.264中的重要概念:档次(Profile)和等级(Level)H.264的语法单元:H.264中没有I图像,P图像和B图像的概念,取而代之的是I片,P片和B片:H.264的码率封装格式:H2.64中I帧和IDR帧的区别IDR(Instantaneous Decoding Refresh)--即时解码刷新。
I 和IDR帧都是使用帧内预测的。
它们都是同一个东西而已,在编码和解码中为了方便,要首个I帧和其他I帧区别开,所以才把第一个首个I帧叫IDR,这样就方便控制编码和解码流程。
IDR帧的作用是立刻刷新,使错误不致传播, 从IDR帧开始,重新算一个新的序列开始编码。
而I帧不具有随机访问的能力,这个功能是由IDR承担。
IDR 会导致DPB(参考帧列表——这是关键所在)清空,而I不会。
IDR图像一定是I图像,但I图像不一定是IDR图像。
一个序列中可以有很多的I图像,I图像之后的图像可以引用I图像之间的图像做运动参考。
一个序列中可以有很多的I图像,I图像之后的图象可以引用I图像之间的图像做运动参考。
h264基线档次中错误隐藏的研究与实现
H.264基线档次中错误隐藏的研究与实现摘要:H.264标准是由运动图像专家组MPEG和ITU中视频编码专家组VCEG联合制定的新低比特率视频压缩编码标准. 与之前标准相比, H.264不仅比H.263+和MPEG4节约了50 %的码率,而且对网络传输表现出更好的亲和性. 它采用了更多的先进技术, 使得在同样的码率下运用H.264标准编码可以获得更好的主客观质量. 同时由于H.264新标准的高效率压缩算法, 视频流在传输过程中对误码丢包也更敏感, 即使单个突发性的随机错误, 也可能严重干扰接收端的正常解码, 造成系统不稳定或者恢复视频质量的急剧下降。
因此在复杂网络环境下的传输稳定性在系统中尤为重要.要使视频在不同的网络环境下传输, 不但需要高效率的编码, 同时经过编码的视频应该很容易地无缝集成到网络协议架构当中. 除此之外, 就视频应用而言, 在高比特误码、丢包和延迟的环境下重新传输丢失的包或者延迟的包是不实际的. 最后,一套完整的丢包误码解决方案是不稳定网络环境视频传输的根本. 为此, H.264新标准采用了多种用于增强压缩视频流抗误码能力的编码技术, 以保证恢复视频流的质量. 因为是在以前编码标准的基础上发展起来的, 所以在误码恢复工具方面自然也沿用了一些传统的方法, 如数据分割等. 同时, 为了具有更好的网络适应性, H.264也创新地使用了一些新的容错技术. 本文首先对错误控制领域各种技术进行了详细分析,将各种常用算法进行分类和归纳总结,同时在项目中根据实际需要进行取舍.其次本文针对一个实际应用的项目, 在DSP平台上基于CDMA信道实现了H.264编解码器, 文中详细分析了项目各个模块, 包括采集, 编码, 传输, 隐藏, 解码, 回放多个模块, 侧重于基于H.264基线档次的误码丢包解决方案. 从编码端到解码端, 从算法层到传输层, 给出了完整的错误控制分析, 基于实际项目需要对基于包传输的网络环境, 尤其是CDMA传输信道以及DSP平台给出系统相关分析. 在实际分析之后本文提出一整套错误控制的解决方案, 给出实际测试结果. 最后对算法结果做出评价, 同时展望以后所要处理的工作.关键字:H.264, 错误隐藏, 错误控制, CDMA, DM642RESEARCH AND IMPLEMENTATION OF ERRORCONCEALMENT IN H.264 BASELINE PROFILEAbstract:The Moving Picture Expert Group (MPEG) and VCEG worked together as a Joint Video Team (JVT), and created a single technical design called H.264/A VC for an ITU-T Recommendation H.264/A VC and for a new part of the MPEG-4 standard called A VC. Compared to H.263v2 (H.263+) or MPEG-4 Simple Profile, H.264 permits a reduction in bit rate by up to 50% for a similar degree of encoder optimization at most bit rates. Through the Network Adaptation Layer, H.264 bit streams can be easily transported over different networks. H.264 offers good video quality and low bit rates because of more creative algorithms. Meanwhile, more efficient algorithms lead to more complexity and more correlation. So any bit error or package loss in transmission channel may be a significant error in decoder or an acute video quality loss, and error control is the most important in a robust system over unreliable network.For network friendly, compressed bit stream should not only be efficient but also be integrated into every network protocol framework easily. Moreover, for real time video application, it’s impossible to retransmit the lost or delayed package in error-prone and package-loss network. Finally, the most important is that an error resilience solution isnecessary for the unreliable network. A robust wireless system should cover and solve these problems. H.264 provides the necessary tools to deal with packet loss in packet networks and bit errors in error-prone wireless networks. Some tools are inherited from previous standards such as data partition, and there are other creative techniques in H.264: parameters sets, SP/SI, FMO, RSs etc. First, this paper elaborates all error resilience related techniques generally and classifies them.Then, for instance, this paper analyses every necessary module in a robust wireless surveillance system based on a project, named Implementation of H.264 Codec based on CDMA on the platform DM642, include capture, encode, transmission, error concealment, decode, playback, especially focuses on error resilience solution of H.264 baseline profile. After the analysis, I present a new solution about error location and error concealment, which can effectively solve the problem of disorder and lost package. Some experiments are provided to justify the algorithms. Finally I give the conclusion and future work.Key Words: H.264, Error Concealment, Error Control, CDMA, DM642学位论文原创性声明本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究工作所取得的成果。
基于视频隐写的H.264文件鉴权播放方法
基于视频隐写的H.264文件鉴权播放方法蔡洋琰;张宇【摘要】针对多媒体内容分发与播放系统,在不降低用户体验的前提下限制播放内容.该方法首先自适应地选择待嵌入的二值图像,通过修改特定位置AC系数的符号在视频帧内预测中嵌入.然后在解码播放时自适应地选择待匹配的二值图像,与提取的水印进行匹配,匹配通过,才继续解码并播放视频;否则直接停止解码播放.实验结果表明,嵌入水印的算法具有较高的鲁棒性,嵌入水印前后视频峰值信噪比(PSNR)、码率基本不变.算法复杂度低,实用性强,实现了对非法视频的有效过滤.【期刊名称】《计算机应用》【年(卷),期】2014(034)001【总页数】4页(P171-174)【关键词】H.264;视频隐写;鉴权播放;帧内预测;符号编码【作者】蔡洋琰;张宇【作者单位】中国科学院声学研究所高性能网络实验室,北京 100190;中国科学院声学研究所高性能网络实验室,北京 100190【正文语种】中文【中图分类】TP37随着科技的进步,现在很多公共场所都安装有一些终端设备,接收由服务器传来的视频并播放。
现有的终端设备往往接收到视频文件后不加以认证直接予以播放。
由于操作人员的疏忽或别有用心的人刻意为之,这些视频可能被替换为涉及暴力、色情等不合时宜的内容,在公共场所播放,会造成极恶劣的社会影响。
因此,在终端对即将播放的内容进行鉴权播放,势在必行。
视频隐写是指在不影响视频质量的前提下,往视频里添加隐藏信息。
鉴于原始视频[1-3]中添加的隐藏信息容易受到压缩过程的损坏,针对H.264文件,研究者们往往选择在整数离散余弦变换(Discrete Cosine Transform, DCT)系数[4-7]和运动矢量[8]中嵌入。
在运动矢量中嵌入隐藏信息,复杂度高,实时性差。
在整数DCT系数中嵌入水印,安全性高[9-11],可实现大容量[12]嵌入。
本文提出了一种基于视频隐写的H.264文件鉴权播放方法,根据视频文件的特点,自适应地选择隐写信息,通过改变特定位置AC系数的符号嵌入到视频帧内预测中,并自适应地选择待匹配图像与提取的信息进行匹配,匹配通过视频才得以播放,非法视频被有效过滤,且满足不可见性和码率稳定性的要求,能抵抗一些常见的视频攻击,并且有较好的实时性。
AVS-P2的自适应时空域错误隐藏方法
基于AVS-P2的自适应时空域错误隐藏方法摘要:错误隐藏技术是视频传输中保证重建质量的重要技术,可以有效恢复传输过程中因传输环境恶劣等原因造成的信息丢失和错误,为了增强avs p2的抗传输差错能力,提出了一种基于冗余运动矢量的自适应时空域错误隐藏算法。
对i帧中的受损宏块采用空域错误隐藏方法,利用受损宏块周围已正确解码像素值进行加权插值来恢复;而对非i帧中的受损宏块则采用时域错误隐藏方法,根据宏块的运动剧烈程度分别选择avs p2中通用的错误隐藏方法和基于冗余运动矢量的错误隐藏方法。
最后,在avs p2rm52_20080721平台上实现了该算法,大量仿真实验结果表明,所提方法相比原有方法,解码视频图像的客观质量和主观效果均得到了一定提升。
因此,所提方法可以有效保证avs p2解码端接收视频的主观质量,增强了其抗传输差错能力。
关键词:视频编码;冗余运动矢量;avs p2;错误隐藏adaptive temporal spatial error concealment method based on avs p2ruan ruo lin 1,2 * , hu rui min 2, chen hao2, yin li ming 1(1.school of electronic and information engineering, xianning university, xianning hubei 437100, china ;2.national engineering research center for multimedia software, wuhan university, wuhan hubei 430072, china)abstract:the error concealment is an important technique in the video transmission, and it can ensure the reconstruction video quality and efficiently recover the data loss and the data errors in the transmission process caused by severe transmission environments. in order to enhance the error resilience of avs p2, the paper proposed a new adaptive temporal spatial error concealment method based on the redundancy motion vectors. to conceal a lost block, the paper used the spatial error concealment for the i frame macroblocks, and used the temporal error concealment for the non i frame macroblocks. at the same time, according to the motion intensity of the macroblocks, it used the default error concealment of avs p2 and error concealment method based on redundancy motion vectors, respectively. lastly, the proposed algorithm was realized based on the platform of theavs p2 rm52_20080721. the simulation results show that the proposed method is significantly better than the existing techniques in terms of both objective and subjective quality of reconstruction video.key words:video coding; redundancy motion vector; avs p2; error concealment0 引言随着移动通信技术的飞速发展,3g已将走入寻常百姓家,4g标准也于2010年11月正式确定,在不久的将来也会大规模应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JM86之误码掩盖参考代码完全剖析说明:红色表示函数绿色表示函数中的参数褐色表示函数内部的代码正文本文主要讲述了一些H.264中后处理错误隐藏的知识,而且也集中在解码端实现,根据空域和时域不同的掩盖方法,文章分为两大部分,第一部分主要讲帧内掩盖,相对应的c 文件是erc_do_i.c;第二部分主要讲帧间掩盖,相对应的c文件是erc_do_p.c,这一部分相对于帧内掩盖要复杂得多,也是本文的重点。
下面,我们就从简到难,细细讲述其中的原理。
第一部分:帧内误码掩盖(erc_do_i.c)大家先对整个帧内误码掩盖有个大体的框架,请看下图,其中ercConcealIntraFrame ()是帧内的入口函数。
帧内的掩盖方式为像素平均权值,方法相对来说比较简单。
下面,我们通过一个一个函数分析来了解帧内掩盖算法。
int ercConcealIntraFrame( frame *recfr, int32 picSizeX, int32 picSizeY, ercVariables_t *errorVar )函数功能简述:这是帧内掩盖的入口函数,被image.c中的exit_picture()函数所调用。
这里,没有太多的代码,只是做了坐标级之间的转换,并调用了concealBlocks()。
函数参数解释:frame *recfr表示当前帧指针结构体,这个结构体包含了指向当前帧Y,U和V块的指针。
int32 picSizeX 表示一帧的宽度,当QCIF图像时,该值为176,当CIF图像时,该值为352。
int32 picSizeY表示一帧的高度,当QCIF图像时,该值为144,当CIF图像时,该值为288。
ercVariables_t *errorVar 表示包含了一些掩盖状态和信息的结构体。
注意点:1.ercVariables_t结构体中变量的含义(详看我的erc_api.c初探)。
2.不同基本单位之间的转换,我的意思是指以宏块为单位的横纵坐标转换成以8x8块为单位的坐标之类的问题。
函数详述:函数内部的动作比较简单,但是照顾到刚刚接触误码掩盖的朋友,在介绍第一个函数的时候,我更多的会讲一些变量的含义以及代码的操作习惯。
这边我主要现讲两方面,一个就是errorVar->yCondition、errorVar->uCondition和errorVar->vCondition指的是什么?另外一个就是不同基本单位之间的转换。
在接收端,有一个宏块状态图的概念,它的作用就是记录一帧图像所有宏块的接收状态。
如下图:标记为ERC_BLOCK_OK的宏块表示正确接收,标记为ERC_BLOCK_CONCEALED的宏块表示错误的块但是已经被掩盖过,标记为ERC_BLOCK_CORRUPTED或ERC_BLOCK_EMPTY就表示错误接收或已经丢失的块。
这样,我们在程序中就可以通过这张表来知道哪些块是需要进行误码掩盖的,而errorVar->yCondition、errorVar->uCondition和errorVar->vCondition这三个数组就是分别存放了YUV块的这种状态标志,但是这边需要注意的是,在程序中存放的时候,并不是以宏块为单位的,而是进一步将一个宏块分割成4个8x8的子块,存放的是这些子块的状态信息。
当然,对于UV来说,不用分割,基本单位已经是8x8了。
由此我们知道,接下去误码掩盖处理的过程中,并不是以整像素单位进行的,而是以8x8块为单位的。
进一步,我们现在应该明白为什么程序一开始对于YUV的lastRow和lastColumn所作的赋值。
//YlastRow = (int) (picSizeY>>3);lastColumn = (int) (picSizeX>>3);//UVlastRow = (int) (picSizeY>>4);lastColumn = (int) (picSizeX>>4);假设对于一个DCIF图像来说,picSizeX=176 picSizeY=144,作了处理后,对于Y块就被分割成22x18个8x8块,而对于UV块就被分割成11x9个8x8块。
其实这个就是我所说的不同基本单位之间的转换。
明白了上面这两点,这个函数就理解了,下面就是调用了concealBlocks()。
static void concealBlocks( int lastColumn, int lastRow, int comp, frame *recfr, int32 picSizeX, int *condition )函数功能简述:函数根据亮度和色度分别以不同的基本单位扫描当前帧,先定列,然后在该列内逐行扫描,确定受损区域的范围。
但是这里扫描列的顺序跟帧间的不同,是从从左往右逐步扫描。
在确定受损区域后,就调用相应函数进行掩盖。
函数参数解释:int lastColumn表示以8x8块为单位的一帧最大列数。
int lastRow 表示以8x8块为单位的一帧最大行数。
int comp用来判断亮度块还是色度块的标志,其中0表示Y块、1表示U块、2表示V块。
frame *recfr表示当前帧指针结构体,这个结构体包含了指向当前帧Y,U和V块的指针。
int32 picSizeX 表示一帧的宽度,当QCIF图像时,该值为176,当CIF图像时,该值为352。
int *condition 表示当前块的状态标志。
注意点:1.亮度和色度分别以不同的基本单位扫描当前帧。
2.跟帧间的扫描方式加以区别。
函数详述:函数一开始便根据亮度和色度而分别设定了相应的步长。
if ( comp == 0 )step = 2;elsestep = 1;由此可见,亮度块是以宏块单位来扫描,而色度块是以8x8块单位来扫描。
确定基本单位后,下面就可以扫描一帧图像来确定误码区域,相应的代码以及图片如下。
for ( column = 0; column < lastColumn; column += step ){for ( row = 0; row < lastRow; row += step ){[查找误码区域]}}接下去,根据一列内受损区域的不同(共3种),采取相应不同的掩盖顺序,判断代码如下:if ( lastCorruptedRow >= lastRow ){[从上往下进行掩盖]}else if ( firstCorruptedRow == 0 ){[从下往上进行掩盖]}else{[从上下一起向中间进行掩盖]}相应的具体步骤我不详说,这一部分帧内和帧间是相同的,请看下图,加深印象。
接下去就是进行真正的掩盖工作,这边一共会调用到两个函数,分别是ercCollect8PredBlocks(),ercPixConcealIMB(),其中ercCollect8PredBlocks()用来检测当前丢失块四周块的正确接收程度,ercPixConcealIMB()会进一步调用pixMeanInterpolateBlock()来进行最后的误码掩盖。
最后,进行完误码掩盖后,就会将相应块的状态标志置为已经被掩盖,即ERC_BLOCK_CONCEALED,相关代码如下。
if ( comp == 0 ){condition[ currRow*lastColumn+column] = ERC_BLOCK_CONCEALED;condition[ currRow*lastColumn+column + 1] = ERC_BLOCK_CONCEALED;condition[ currRow*lastColumn+column + lastColumn] = ERC_BLOCK_CONCEALED; condition[ currRow*lastColumn+column + lastColumn + 1] = ERC_BLOCK_CONCEALED; }else{condition[ currRow*lastColumn+column ] = ERC_BLOCK_CONCEALED;}int ercCollect8PredBlocks( int predBlocks[], int currRow, int currColumn, int *condition,int maxRow, int maxColumn, int step, byte fNoCornerNeigh )函数功能简述:函数用来收集当前丢失块四周8块的状态信息(是否可用),但程序实际上只收集了上下左右四块的信息。
函数参数解释:int predBlocks[]表示用来收集当前丢失块四周8块的状态信息的数组。
int currRow表示扫描当前丢失块的行数(以8x8块为单位)。
int currColumn表示扫描当前丢失块的列数(以8x8块为单位)。
int *condition 表示当前块的状态标志。
int maxRow 表示以8x8块为单位的一帧最大行数。
int maxColumn表示以8x8块为单位的一帧最大列数。
int step根据亮度块和色度块而设定的步长,亮度块为2,色度块1。
byte fNoCornerNeigh用来判断是否要收集斜角的四个块的状态信息。
函数详述:整个函数的目的非常明确,就是要收集到当前丢失块四周块的状态信息,并将信息保存到predBlock[8]数组中。
这边要明白数组中不同索引所代表周围块的位置,并且根据亮度块和色度块不同所收集周围块的区别,这边比较简单,我不多说了,大家请看下图,再对照代码,我想很快就能够明白。
void ercPixConcealIMB(byte *currFrame, int row, int column, int predBlocks[], int frameWidth,int mbWidthInBlocks)函数功能简述:函数根据ercCollect8PredBlocks()所得到的predBlocks数组,即周围块的状态信息,来决定是否得到该8x8块所在宏块左上顶点的指针,并且还会取得当前丢失宏块左上顶点的指针。
函数参数解释:byte *currFrame表示当前帧的启示指针地址。
int row表示扫描当前丢失块的行数(以8x8块为单位)。
int column表示扫描当前丢失块的列数(以8x8块为单位)。
int predBlocks[] 表示用来收集当前丢失块四周8块的状态信息的数组。
int frameWidth 表示一帧的宽度,当QCIF图像时,该值为176,当CIF图像时,该值为352。
int mbWidthInBlocks根据亮度块和色度块而设定的步长,亮度块为2,色度块1。