如何用 Visual Studio 2005 編譯 Media Player Classic

2009年7月11日 星期六
這篇文章的英文版本: How to compile Media Player Classic using Visual Studio 2005

Media Player Classic (MPC) 是很多人喜歡用的 Open Source Media Player, 因為它的介面很簡單, codec 的支援也夠廣, 但要把它 build 出來可不是一件容易的事, 在網路上只能找到一些簡單的步驟, 但沒有一篇是解釋怎麼好好地把它從頭到尾 build 好, 我花了好幾個晚上把問題一個一個解決, 終於可以 build 好了, 在這裡跟大家分享, 讓想改 MPC 的朋友可以快一點上手, 也讓自己有一個備忘錄.

我的系統是 Aspire One 751 + Windows XP SP3. 但我想在 Vista 上的步驟應該大同小異.

這裡就是要怎麼用 Visual Studio 2005 來 Build MPC 的步驟:
1. 先下載並安裝一些檔案:
a. Platform SDK 6.1.
- 在這裡可以下載:


- 預設安裝路徑是會裝到這:
C:\Program Files\Microsoft SDKs\Windows\v6.1


b. DirectX SDK June 2007 版本 (這是最後一版 DirectX SDK 有含 DirectX 7 SDK)
- 可以在這裡下載:
http://www.microsoft.com/downloads/details.aspx?FamilyID=371f6ba4-2737-46ab-b275-0dcab31459b5&displaylang=en

- 用 WinRAR 解壓縮後, Copy dxsdk 這個目錄到這裡:
C:\Program Files\Microsoft SDKs\Windows\dxsdk_jun2007



2. 把下列這些路徑加到 VS2005 (用下列這樣的順序加到最前面):

a. Include path:
- C:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\DirectShow\BaseClasses
- C:\Program Files\Microsoft SDKs\Windows\dxsdk_jun2007\Include
- C:\Program Files\Microsoft SDKs\Windows\v6.1\Include

b. Library path:
- C:\Program Files\Microsoft SDKs\Windows\dxsdk_jun2007\Lib\x86
- C:\Program Files\Microsoft SDKs\Windows\v6.1\Lib



3. 所有的 Project 都得用 Unicode 的 build configuration, 一期有三個主要的 projects:

a. BaseClasses (在 Platform SDK 裡)
- 用 "Debug" 這個 build configuration.
b. Filters (在 MediaPlayerClassic source code 裡)
- 用 "Debug Unicode Lib" configuration
c. mplayerc (在MediaPlayerClassic source code 裡)
- 用 "Debug Unicode" configuration



4. 在 in "C:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\DirectShow\BaseClasses"裡, build "BaseClasses" project.
a. 在 Project 的設定裡, 得更改下列這個設定, 不然會在 build mplayerc 時會有有 "__wargv & __argc link error" 的錯誤產生.
- In C/C++ Code Generation, change RunTime Library from "MultiThreaded Dubug DLL" to "MultiThreaded Debug"
b. 確定用 "Debug" configuration.
c. Build 完成後, copy "strmbasd.lib" (在 "Debug" folder 裡) 到 "guliverkli\trunk\guliverkli\lib" folder.
- 把 "strmbasd.lib" 這個檔名改成 "StrmBaseDU.lib".
5. 在 "guliverkli\trunk\guliverkli\src\filters" 裡, Build "filter" project.
a. 準備 AP4 的 Code, 在 "guliverkli\trunk\guliverkli\src\filters\parser\mp4splitter\AP4" 裡
- 解壓 "Bento4_0.6.3-001.7z", 在這裡 "guliverkli\trunk\guliverkli\src\filters\parser\mp4splitter\AP4\Update\v0.6.3"
- Copy "Source" folder 裡的 "Bento4_0.6.3-001.7z" 檔案到 to "guliverkli\trunk\guliverkli\src\filters\parser\mp4splitter\AP4"
- 把這三個 "Config", "Core", and "Crypto" folder (在"mp4splitter\AP4\Update\v0.6.3\Source" 裡), copy 到 "mp4splitter\AP4\Source" (覆蓋過去).
b. 把 BaseClasses project 的路徑改到 "Windows\6.1".
- 用任何一個文字 editor 打開 "filters_vs2005.sln". 找 "BaseClasses" 這個字串, 然後修改路徑裡的 "v6.0" 到 "v6.1".
c. 修正 "CDecoder.cpp".
- 找 "charmap" 這個字串, (在 CCDecoder::DecodeCC() 裡). 在 "charmap" array 裡, 確定在每一個 '? 後都有一個單引號 (就是都改成 '?' )
d. 修改 VP62.h, (在 "guliverkli\trunk\guliverkli\src\filters\parser\flvsplitter\flvsplitter.h")
- 找這個字串 "VP62.h" (在 "flvsplitter.h" 檔案裡). Mark 這一行 #include "VP62.h"
- 在 "FLVSplitter" 這個 project 裡, 移除 "Source --> VP62.cpp" 這個檔案 (不須要).
e. 開啟 "filter" project 然後開始 build code.
- 開啟會有警告訊息說 "RadGTSplitter" 不存在, 這可以不用理會.
- 記得用 "Debug Unicode lib" configuration.
6. Build "mplayerc" project (在 "guliverkli\trunk\guliverkli\src\apps\mplayerc" 裡)
a. 修正 BaseClasses project 裡的路徑到 "Windows\6.1". 這是為了要用 Windows 6.1 SDK 裡的 BaseClasses.
- 用任何文字 editor 開啟 "mplayerc_vs2005.sln". 找到 "BaseClasses" 這個字串, 把路徑裡的 "v6.0" 改到 "v6.1".
b. 開啟 "mplayerc" project.
c. 在 "mplayerc" project 裡, 移除 "temp --> SubmitNotPlayFileDlg.cpp" 檔案 (不須要).
d. 修改下列這個設定, 不然在 build "mplayerc" 時會有 "__wargv & __argc link error" 錯誤訊息產生.
- 在 Project 的設定裡, 在 "C/C++ Code Generation" 選項, 把 "RunTime Library" 從 "MultiThreaded Dubug DLL" 改成 "MultiThreaded Debug"
e. 確定用 "Debug Unicode" configuration 來 build "mplayerc"



7. Build 完後, 就可以直接執行 "Debug" folder 裡的 mplayerc 了!