??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
操作pȝQWindows XP SP2、SP3
开发环境:Visual Studio 2005 Professional
版本控制工具QTortoiseSVN
说明Q用来下载程序源代码Q直接选检出,然后输入
https://guliverkli.svn.sourceforge.net/svnroot/guliverkli/trunk/guliverkli/
q个地址Q源代码地址Q把代码出到本地?/p>
SDKQ?/p>
1. DirectX 9 SDKQ需要DirectShowQ?/p>
说明QDirectX SDK Summer 2004之后DirectShow不被整合到DirectX SDK中而是以Extras
的Ş式发布,它的最后一个版本ؓDirectX SDK Extras 2005,2 版。之后它被整合到Windows SDK中。而VS2005的WinSDK中不包含DirectShow。方便v见我下蝲的老版本DirectX 9.0b SDK?/p>
地址Q?a >http://www.directshow.cn/SDK/DX9SDK.rar
2. Windows Media Format SDK 9
地址Q?a >http://download.microsoft.com/download/3/0/4/30451651-9e47-4313-89a3-5bb1db003c26/WMFormatSDK.exe
?开发环境搭?/strong>
也就是包含一下刚刚提到的SDK目录Q下载安装所需SDKQ由于源代码的文中提到
“you may need to add "Debug Unicode" and "Release Unicode" configs to the project file of the directshow baseclasses”Q?/span>所以需要先~译DirectShow中的BaseClassesE序?/p>
~译旉要在VS2005的包含文仉d
X:\DXSDK\Include
X:\DXSDK\Samples\C++\DirectShow\BaseClasses
步骤Q工?>选项=>目和解x?>VC++目录=>包含文g
因ؓBaseClasses代码中都是用<>包含的头Q所以我把本w的路径加到了系l中?/p>
~译BaseClasses时大概会发生三类错误Q?/p>
1. 提示POINTER_64未定?/p>
原因Q这是由于PlatformSDK和DirectXSDK中的同名头文件basetsd.h冲突造成的,PlatformSDK中的定义了POINTER_64而DirectXSDK没有定义却默认先~译Q导致winnt.h中找不到POINTER_64?/p>
解决办法Q在刚提到的包含文g中确保系l文件在上边Q然?/p>
右键=>工程=>属?>C/C++=>常规中清I附加包含目录(因ؓ会优先编译这里的路径Q?/p>
2. q回值默认不为int
原因QVS2005相对于VS2003和VC6~译相对严格Q函数无q回g能默认ؓint?/p>
解决ҎQ将提示错误?span style="COLOR: #0000ff">operator
=(LONG);加返回值intQ因为我没找到此重蝲的实玎ͼq回什么无所谓了。或者右?>工程=>属?>C/C++=>命o行中附加选项d/wd4430使其默认q回int?/p>3. 未定义的局部变?/p>
原因Q也是由于VS2005之前版本在for中定义的变量看做是for外定义可以拿到@环以外用,而VS2005不可以?/p>
解决ҎQ将其报错地方的定义Q拿?span style="COLOR: #0000ff">for外定义。或者右?>工程=>属?>C/C++=>语言中的强制for循环范围中的一致性选否。还有一?span style="COLOR: #0000ff">static变量加上DWORD定义可以了?/p>
q样基本可以编译通过了?/p>
然后Debug Unicode ?Release Unicode目录包含到系l中?/p>
步骤Q工?>选项=>目和解x?>VC++目录=>包含?/p>
然后q需要包含几个文件和库,具体如下?/p>
Z以后方便DirectShow的开发我把可能用到的都加在了里边?/p>
?~译Media Player Classic
1. ~译序
HowToCompile中提到要按照一定顺序编译才可以成功?/p>
而且在调试阶D|l一以Debug Unicode形式~译?/p>
序如下Q?/p>
1. deccs
2. dsutil
3. ui (run \lib\ui.bat to merge them)
4. subpic
5. subtitles
6. filters (for mpc only build those configurations which output a lib, the rest outputs stand- alone filters)
7. apps\mplayerc
2. ~译旉到的问题和解x?/p>
按照~译序一一解决
?~译deccs通过。在lib目录里生成decssDU.lib?/p>
?~译dsutil通过。在lib目录里生成dsutilDU.lib?/p>
?~译ui通过。在lib目录里声UsizecbarDU.lib、ResizableLibDU.lib、CmdUIDU.lib?nbsp; TreePropSheetDU.lib?/p>
?~译subpic通过。在lib目录里生成subpicDU.lib?/p>
?~译 subtitles出现好多错误。查看源代码发现字符数组定义有问题,~少 ' ?/p>
解决ҎQ在CCDecoder.cpp中第127行定义的static WCHAR charmap[0x60]把其初始?nbsp; 中的?都补上右侧的 ' 。通过之后在lib目录里生成libssfDU.lib和subtitlesDU.lib?/p>
?~译filtersQDebug Unicode Lib形式Q?p|。好多提C无法打开文gstrmbaseDU.lib。还有许多关于Ap4文g没找到的错误?/p>
解决ҎQ不知道Z么最C载的MPC源代码会~少以前的几个项目如图:
strmbaseDU.lib是以前BaseClasses生成的,不过没关p这个应该和刚刚~译DirectShow中的BaseClasses是同LQ刚刚已l包含了Debug Unicode只不q那个生成文件名为strmbasd.libQ只要复制一份strmbaseDU.lib可以了。其他版本的~译同理?/p>AP4文g那个需要把
X:\guliverkli\src\filters\parser\mp4splitter\AP4\Update\v0.6.3\Bento4_0.6.3-001.7z解压后把
Source文gҎ贝到X:\guliverkli\src\filters\parser\mp4splitter\AP4\ 目录下。再?/p>
X:\guliverkli\src\filters\parser\mp4splitter\AP4\Update\v0.6.3\Source文g夹去覆盖更新一下?/p>
l箋~译QFLVSplitter.h中出C个错误提C找不到VP62.h和VP62.cpp。进入报错代码,注释着//comment this out if you don't have VP62.cpp/hQ所以将此行注释掉就可以了,q在目文g列表中将VP62.h和VP62.cpp从项目中U除。重新编译这个项目,通过。在lib目录中生成FLVSplitterDU.lib、TreePropSheetDU.lib、MP4SplitterDU.lib{等多个lib文g?/p>
⑦编译mplayerc出现三个错误。一个是SubmitNotPlayFileDlg.cpp未找刎ͼ另两个是错误D3D9b_SDK_VERSION和MixerPref9_RenderTargetYUV未声明的标识W?/p>
解决ҎQ找到mpayerc目中的SubmitNotPlayFileDlg.cpp和SubmitNotPlayFileDlg.h从该目U除。然后到vmr9.h中找到enum __MIDL___MIDL_itf_vmr9_0012_0001q个枚D在最后添加MixerPref9_RenderTargetYUV = 0x00002000?/p>
最后在d3d9.h中加?define D3D9b_SDK_VERSION 32 (帔R有可能不准确)?/p>
l箋~译Q提C无法打开文gRadGtSplitterDU.libQ由于这个项目已l没有了Q所以去q接器中把包含去掉。步骤:右键mplayerc目 工程=>属?>q接?>输入Q在附加依赖中把RadGtSplitterDU.libL?/p>
l箋~译Q成功。Mplayerc下的Debug Unicode目录会生成mplayerc.exe?/p>
q行Q会出现以下囄Q到此Media Player Classic~译成功?/p>