windows系统用VC++6.0编译MPEG4IP过程
作者: 不详 2012/5/18 22:12:18
经过5天的努力,MPEG4IP Package在Window下的编译终于搞掂,编译环境为VC++6.0。自我感觉又向前迈进了一步^_^。废话少说了,总结一下编译过程吧。
MPEG4IP出了很多版本,根据本人的测试,能够编译(下文都是指Windows环境下)成功的是0.9.3版和1.4.1版(从0.9.4到1.3.0在Windows下无法打开工程,奇怪了)。可以看成是一个新版一个旧版,新版向下兼容,但是有些东西新版里不包含了,只有旧版里才有。因此我同时编译了这个两个版本。
在MPEG4IP_Guide.pdf中大概介绍了一下Windows下的编译过程,但不够细致,需要自己去摸索。首先,MPEG4IP分两个大的模块:encoding60.dsw(文件包的根目录下)和player60.dsw(根目录\player\src下)。打开workspace,这里需要特别提醒一下,有些工程会提示由于格式不同(UNIX格式),需要转换一下。这里全部选择No,然后找到那些工程的dsp文件(工程文件),用写字板或者Word打开,保存一下,再在工程栏中点击那些未打开的工程,即可将其加载进来了。表1列出了需要转换的dsp文件。
Encoding60.dsw中的工程(*.dsp) player60.dsw中的工程(*.dsp)
工程名 路径 工程名 路径
avi2raw sever\util\avi2raw aac_plugin player\src\codec\aa
avdump60 sever\util\avidump celp_plugin player\plugin\audio\celp
lboxcrop sever\util\lboxcrop common lib\rtp
libmissing60 lib\gnu isma_audio_rtp_plugin player\plugin\rtp\isma_audio
libmp4av lib\mp4av libfileposrec lib\fposrec
libmp4v2 lib\mp4v2 libhttp player\lib\libhttp
mp4creator sever\mp4creator libmpplayer player\src
mp4dump lib\mp4v2\util libmsg_queue lib\msg_queue
mp4extract lib\mp4v2\util librtsp player\lib\rtsp
mp4info lib\mp4v2\util mp4player player\src
RGB2YUV sever\util\rgb2yuv mpeg4_iso_plugin player\src\codec\mpeg4
yuvdump util\yuv wmp4client60 player\src\win_client
wmp4player60 player\src
表1:需转换的工程文件及路径
将所有工程加载完毕,在Build菜单下选择Batch Build,选择工程的Release版本,根据MPEG4IP_Guide.pdf上的说明,选择如下工程,见表2:
encoding60.dsw 0.9.3 1.4.1 get files player60.dsw 0.9.3 1.4.1 get files
isoencoder √ √ isoencoder60.exe aac_plugin × √ aac_plugin.dll
RGB2YUV √ √ RGB2YUV.exe mp3_plugin × √ mp3_plugin.dll
avi2raw √ √ avi2raw60.exe mp4player √ √ mp4player.exe
avidump60 √ √ avidump.exe mpeg4_iso_plugin × √ *.dll file
faac √ × faac60.exe wmp4client60 √ √ wmp4client.exe
lame60 √ × lame60.exe wmp4player60 √ √ wmp4player.exe
mp4creator √ √ mp4creator60.exe xvid_plugin × × N/A
mp4dump √ √ mp4dump60.exe
mp4extract √ √ mp4extract60.exe SDL √ × SDL.dll
yuvdump × √ yuvdump.exe
xvidenc(or divxenc?) √ × divxenc60.exe
表2:需要编译的工程及得到的文件
这里需要说明的是,1.4.1版本在编译之前,需要先下载SDL Package来进行编译,生成SDL.lib、SDL.dll、和SDLmain.lib。而0.9.3版本里已经包括了SDL Package了,就可以直接去编译。
关于SDL Package的编译,这里简单介绍一下。首先将下载的压缩包解压到MPEG4IP的根目录下,并将名字改成SDL。接着,在SDL文件夹中解压VisualC文件夹到SDL的根目录中,在SDL的根目录下打开VisualC.html,按照里面的说明进行编译。最后,将生成的SDL.lib、SDL.dll、和SDLmain.lib三个文件放入SDL根目录下的lib文件夹内(该文件夹新建即可)。
提醒注意两点:
一、在编译MPEG4IP时,在VC环境中,Tool->Options->Directories下的Include文件里,不要包含Microsoft Platform SDK for Windows XP SP2中的Include文件夹(而这个文件夹是编译Osip2、Exosip2时必须的),否则会有一些奇怪的编译错误;
二、编译1.4.1版本的player60.dsw中的player60.dsp时,会出现一个编译错误,是说函数Our_SDL_MixAudio()中的参数在强制类型转换时无法完成的错误。这里需要手动修改一下源代码,将需要强制转换的类型修改成合适的,即改成函数Our_SDL_MixAudio()中所定义的行参类型。
好了,基本上总结完了。想想这5天来的钻研摸索,是值得肯定和鼓励的啦,呵呵。在论坛里不断的搜索,寻找相关的解答,总算工夫不负有心人。最后,引用一位大虾的话,我觉得不错,“看源代码没有什么捷径可走,只有先熟悉理论然后根据自己的需要,分部分(模块)看,否则很容易陷入源代码的沼泽中。”