首页 > 代码库 > 在Visual Stdio 2012中编译运行JM18.6的方法
在Visual Stdio 2012中编译运行JM18.6的方法
JM是H.264编码的官方实现,与X264开源实现相比,JM的实现比较完整,代码更加规范,而且同时提供了编码和解码过程,便于对比分析。但是JM的最大缺点是效率比X264低,因此,很多应用都基于X264来做,但是,假如要进行研究学习的话,JM更keyi为合适。
JM18.6可以支持linux、UNIX和windows等多个平台。JM的早起版本中还提供对VC6.0的支持,但是最新的貌似不再支持了,因为网上很多材料都提到”tml.dsw”文件,显然这是VC6.0的工程文件,而在文件目录中没有这个文件了。但是JM18.6中对windows的平台也支持不同版本的VS,如“jm_vc8.sln”,“jm_vc9.sln”和“jm_vc10.sln”,如果使用VS2012的话,直接选择“jm_vc10sln”,然后让VS自动更新就可以了。
图 1 JM18.6 原始文件列表
解压JM18.6之后,打开文件目录,列表如图一所示。
然后双击“jm_vc10.sln”,可能会出现下面的对话框。这是因为JM不可能一直跟着微软的VS版本跑,也没那个必要,因此,这里只支持到VS2010版本。事实上,只有单击更新就可以自动更新到VS2012了。
图 2 更新VC++的库
更新完毕后,在资源管理器界面可以看到如下所示的四个子文件夹。其功能分别为H264/AVC编码、解码、RTP包内容分析和模拟RTP丢包的测试等。
图 3 解决方案管理器里的四个模块
然后单击菜单栏的“使用本地Windows调试器”调试器,这时候会提示你需要更新,单击更新就可以了。该过程比较长,会将老的库都进行更新,同时生成最新的可执行文件等。
更新完毕后,在JM的bin目录下就有了四个重要的可执行程序ldecod.exe、lencod.exe、rtp_loss.exe和rtpdump.exe,一系列以.cfg为后缀的配置文件和测试文件等等。
完成之后,“ctrl+F5”执行编码程序,发现弹出下面的窗体
图 4 找不到编码的配置文件
没有找到配置文件”encoder.cfg”,解决方法:选中资源管理器中的lencod,右击,选择“属性”->“配置属性”->“调试”->“命令行参数”,在命令行参数中输入你的JM工程的bin文件夹的一个编码配置文件的完整路径,但是一定要记住,先加写上”-d ”(-d后和路径之间要有空格)再输入路径,例如,我的是“-d F:/JM/bin/encoder_baseline.cfg”。
此时再编译lencod发现程序能执行:
图 5 找不到待编码的YUV文件
该程程序默认将bin下的“foreman_part_qcif.yuv”文件编码成“test.264”文件,假如你的bin路径下没有这个文件,或者生成的时间不是你当前的时间,或者直接弹出了上面的对话框,说明程序没有对文件foreman_part_qcif.yuv编码。
解决方法是使用普通文本编译器打开“encoder_baseline.cfg”文件,找到下面两个位置,分别设置成文件的绝对路径。
图 6 修改encoder.cfg 文件
例如,我将两个路径设置为:
InputFile ="F:/JM/bin/foreman_part_qcif.yuv" # Input sequence
OutputFile ="F:/JM/bin/test.264" # Bitstream
然后再执行,就可以执行了,然后在bin目录下就看到生成的test.264文件了,使用streameye等播放器查看一下:
图 7 运行编码后的结果
在Visual Stdio 2012中编译运行JM18.6的方法