在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的project文件,而在文件文件夹中没有这个文件了。可是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,右击,选择“属性”->“配置属性”->“调试”->“命令行參数”。在命令行參数中输入你的JMproject的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 执行编码后的结果

 


posted on 2017-08-15 17:51  blfbuaa  阅读(734)  评论(0编辑  收藏  举报