1.实验目的1)掌握常用的编解码器参数及其用法,实现测试序列的编解码2)初步了解H.264视频编解码的基本原理、熟开发工具的使用3)学会使用相关的开发工具修改、调试参考软件,掌握使用相应软件实现视频编解码的经验与技巧,锻炼提高分析问题和解决问题的能力4)调试、编译好相应的实验程序,正确配置测试参数,能预计可能出现的结果1.实验环境(软件、硬件及条件)Windows72.实验方法1)JM工作目录与文件设置①下载并解压JM源代码。②在源代码根目录下的bin文件夹中新建backup文件夹,将bin文件夹中所有文件移入该文件夹做备份。③在源代码根目录下新建encodtest文件夹,作为编码使用。将编码过程所需要的文件,例如:编码配置文件(encoder_baseline.cfg)、待编码视频序列文件(foreman_part_qcif.yuv,对应为编码配置文件中InputFile参数的值)复制到该文件夹中。④在源代码根目录下新建decodtest文件夹,作为解码使用。将解码过程所需要的文件,例如:解码配置文件(decoder.cfg)复制到该文件夹中。⑤检查实验用机安装的MSVisualC++版本,根据表3,本实验打开jm_vc10.sln解决方案。2)配置、编译、测试编码项目——lencod①选中lencod项目,打开主菜单“项目——属性”,将所有配置(Debug、Release)和所有平台(Win32、x64)“常规”选项中的“输出目录”设置为“.\bin\$(Configuration)_$(Platform)\”;将“调试”选项中“工作目录”设置为“.\encodtest”,在“命令参数”中设置要使用的解码配置文件,例如:“-dencoder_baseline.cfg”,然后确定修改。②选中lencod工程,选择鼠标右键菜单“设为启动项目”。③打开主菜单“生成--批生成”,勾选所有的lencod项目,点击生成后,将会在主目录bin文件夹的Debug_Win32/x64文件夹及Release_Win32/x64文件夹下生成Win32/x64平台的调试版(运行速度慢)和发行版(运行速度快)编码器程序lencod.exe。打开主菜单“生成--配置管理器”,将活动解决方案配置和平台分别设置为Release何Win32,执行调试完成编码。此时会在源代码根目录下的encodtest文件夹中生成几个新文件,其中test.264(对应编码配置文件中OutputFile参数的值)即为压缩码流文件。3)配置、编译、测试解码项目--ldecod①选中ldecod项目,打开主菜单“项目——属性”,将所有配置(Debug、Release)和所有平台(Win32、x64)“常规”选项中的“输出目录”设置为“.\bin\$(Configuration)_$(Platform)\”;将“调试”选项中“工作目录”设置为“.\decodtest”,在“命令参数”中设置要使用的解码配置文件,例如:“decoder.cfg”,然后确定修改。②将编码生成的压缩码流文件test.24复制到decodtest文件夹中。③选中lencod工程,选择鼠标右键菜单“设为启动项目”。④打开主菜单“生成--批生成”,勾选所有的ldecod项目,点击生成后,将会在主目录bin文件夹的Debug_Win32/x64文件夹及Release_Win32/x64文件夹下生成Win32/x64平台的调试版(运行速度慢)和发行版(运行速度快)编码器程序ldecod.exe。打开主菜单“生成--配置管理器”,将活动解决方案配置和平台分别设置为Release何Win32,执行调试完成编码。此时会在源代码根目录下的decodtest文件夹中生成几个新文件,其中test_dec.yuv(对应解码配置文件中OutputFile参数)即为解码文件。4)阅读JM源代码根目录下的Readme.txt文档以及根目录下doc文件夹中的JMReferenceSoftwManu.pdf文档,掌握JM编解码程序命令行参数的详细用法以及常用的配置参数意义。①编码:lencod.exe[-h][-ddefault-file][-ffile][-pparameter=value]编解码配置文件encoder_baseline.cfg中的重要参数如下:②解码器:ldecod.exe[-h][-ddefault-file][-ffile][-pparameter=value]解码器配置文件decoder.cfg如下:5)分别使用修改编解码cfg配置文件和命令行-p参数的两种方式显现课程用测试序列前20帧的baseline档编解码,要求:码流文件名(name.264)和重建文件名(name.rec.yuv)与测试序列(name.yuv)一致;给出修改的配置文件内容和完整的编解码命令行参数。4.实验分析1)编码①修改的配置文件内容-------------------------------JM18.6(FRExt)-------------------------------InputYUVfile:akiyo_cif.yuvOutputH.264bitstream:akiyo_cif.264OutputYUVfile:akiyo_cif_rec.yuvYUVFormat:YUV4:2:0Framestobeencoded:50Freq.forencodedbitstream:30.00PicInterlace/MbInterlace:0/0Transform8x8Mode:0MEMetricforRefinementLevel0:SADMEMetricforRefinementLevel1:HadamardSADMEMetricforRefinementLevel2:HadamardSADModeDecisionMetric:HadamardSADMotionEstimationforcomponents:YImageformat:352x288(352x288)Errorrobustness:OffSearchrange:32Totalnumberofreferences:5ReferencesforPslices:5ReferencesforBslices(L0,L1):5,1Sequencetype:IPPP(QP:I28,P28)Entropycodingmethod:CAVLCProfile/LevelIDC:(66,40)MotionEstimationScheme:FastFullSearchSearchrangerestrictions:noneRD-optimizedmodedecision:usedDataPartitioningMode:1partitionOutputFileFormat:H.264/AVCAnnexBByteStreamFormat-------------------------------------------------------------------------------②编码命令行lencod-dencoder_baseline.cfg-pinputfile=akiyo_cif.yuv-poutputfile=akiyo_cif.264-preconfile=akiyo_cif_rec.yuv-psourcewidth=352-psourceheight=288-poutputwidth=352-poutputheight=288-pframestobeencoded=20③实验结果2)解码①修改的配置文件内容-----------------------------JM18.6(FRExt)-------------------------------------------------------------------------------------------------------InputH.264bitstream:akiyo_cif.264OutputdecodedYUV:akiyo_cif_rec.yuvInputreferencefile:test_rec.yuv②解码命令行ldecod-ddecoder.cfg-pinputfile=akiyo_cif.264-poutputfile=akiyo_cif_rec.yuv③实验结果5.实验结论JM编码器是H.264官方发布的测试源码,其实现了H.264建议的所有的特性,所以学术研究的算法都是在JM的基础上进行实现并和JM源进行比较,得出算法的优缺点。但是JM程序在编写的时候就没有考虑效率,只是考虑引入各种新特性以提高编码的性能而忽视了整个程序的复杂度,让JM的编码复杂度极高、运行速度相当慢。所以JM编码器只适用于学术研究,没有实用效果。JM编码器采用的是标准的C代码格式,可以在windows、linux、android等环境中进行编译,而且JM编码器的基本参数的选择采用配置文件格式进行提供,对编译好的JM程序进行参数修改时,只需要在配置文件中进行修改即可,不需要重新编译。JM提供了baseline、main、extended三种不同级别的配置文件,里面的基本参数的参考值也已经提供。