如何用 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 了!

如何用 Aspire One 751 串流 (Streaming) YouTube HD 和 QuickTime

2009年6月29日 星期一
如果你還不知道要怎麼用 Aspire One 751 看 HD 影片的話, 請參考之前的這一篇文章 "如何在 Aspire One 751 看 YouTube & QuickTime H.264 HD 影片".

但你一定會問, 每一次都要下載才能看, 那不是每次都要等很久, 而且還要存在 HDD 上才看的到, 有沒有方法可以用 Streaming 的方式, 這樣就可以邊下載邊看?

答案是:有的! Windows Media Player 本身雖然有支援 Streaming, 但並不支援 YouTube & QuickTime, 有很多 Open Source 的 Media Player 也都有支援 Streaming, 如下:

1. VLC Media Player: 有支援 streaming, 但不支援 DirectShow 硬解.
2. SMPlayer: 有支援 streaming, 但不支援 DirectShow 硬解.
3. KMPlayer: 有支援 streaming, 也支援 DirectShow 硬解, 但用起來就是不順.
4. QuickTime Player: 不是 Open Source, 只支援 QuickTime Streaming, 但不能用 DirectShow 硬解.

所以試到最後, 只有 Media Player Classic (MPC) 這個 Open Source Media Player 可以正確地支援 streaming & DirectShow 硬解. 為什麼 DirectShow 的支援很重要? 因為 Cyberlink 的硬解是用 DirectShow 架構的, 而 Intel US15W 如果不用硬解的話, CPU 是沒辨法順利解壓播放 HD 影片的.

為什麼大部分的 Open Source 原生支援 DirectShow 架構呢? 因為大部份的 OpenSource 都是使用 Open Source Codec, 大部份也都支援不只一個 OS 平台 (像 VLC, 就支援 Windows, Linux 和 Mac OS X), 如果使用 DirectShow 架構後, 在其它的 OS 平台執行就會有問題.

Media Player Classic 可以在這裡下載:
http://sourceforge.net/projects/guliverkli/

MPC 的畫面, 很簡潔:


按 Ctrl-O 後, 直接把 YouTube HD 或 QuickTime HD 的 Link Copy & Paste 進去:


按 OK 後, MPC 竟然回應失敗!




花了好幾天晚上研究, 也看了 source code, 在懷疑是不是因為沒有用到內建的 CyberLink codec 而產生的問題, 果然, 在加了一些設定後, 讓 MPC 使用 CyberLink 的 codec, 就可以了! 用下列的方法來設定, 原來是得把 CyberLink 的 MP4 splitter 才能正確的讓 MPC 分辨 streaming video 的格式是 H.264.

打開 Option 選項:


到 "External Filter" 裡, 按下 "Add Filter...".



找一下, 把 "CyberLink MPEG-4 Splitter (PDVD8)" 加進來.


加進去後, 別忘了要把這個 filter 設定成 "Prefer".


這樣就可以正確的用串流的方式看網路上的 HD 影片了! 可以看到視窗左下方顯示著目前 streaming 的大小.


雖然還是得等, 但至少不用下載全部的檔案再去開啟, 省了很多麻煩!

牙周病也會和免疫系統有關

2009年6月25日 星期四
今天去做了第三次的牙周病檢查, 看來嚴重的那顆牙齒是得拔掉了, 我問醫生為什麼我的牙周病這一年來變的嚴重很多, 他說和免疫系統有很大的關係, 雖然正確的刷牙和定期去洗牙有幫助, 免疫系統也是主因之一; 因為在牙腔內會有一定的細菌存在, 這些細菌如果侵犯到牙根時, 就會付著在牙根, 就像樹根被侵蝕一樣, 這會導致牙齦吸取不到營養, 牙齦萎縮, 就是牙周病; 如果刷牙和洗牙的習慣不變, 牙周病變壞速度加快很多, 那很有可能就是免疫系統的問題了.

這個就是說, 身為高科技人的你, 不論是宅男或宅女, 只要是生活起居不正常, 像我一樣每天工作超時, 睡眠及休息不足, 不只是會得什麼 H1N1 或什麼心臟肝臟慢性疾病而己, 牙齒也是會出問題的, 可不要小看牙齒的問題, 牙齒不好可是會要命的, 吃任何東西都會沒胃口.

話說回來, 這個和 gadget 有什麼關係, 我有問醫生, 我都用電動牙刷了耶, 這樣還不夠喔, 他是說電動牙刷有好幾種, 近幾年來出的幾種有用 Ultra Sonic 的電動牙刷才是真的有效, 只有轉動靠摩擦力的沒什麼用.

可是... 可是... 我的電動牙刷就是 Ultra Sonic 的啊 (我沒記錯的話, 如果不是, 馬上去買)! 醫生說那可能是我刷牙的方式不對, 刷牙不能只刷牙齒不刷牙齦, 他看到我的牙齦有點發炎, 幫我上了牙菌斑顯影劑, 然後叫我就在診所裡刷一次牙, 果然, 牙齦有一部份沒刷到.

所以, 有高科技的電動牙刷, 沒有正確的刷牙方式, 是不會發揮到最大的效益的.

如何在 Aspire One 751 看 YouTube & QuickTime H.264 HD 影片

2009年6月23日 星期二
現在在市面上的小筆電, 大多是用 Atom N270/N280 或 Z520/Z530, 大多是 8.9", 10.1", 或是像 Sony Vaio P 的 8" 小螢幕, Aspire One 751 的 11.6" 應該是所有小筆電裡頭螢幕最大的了 (按照 Microsoft & Intel 的不成文規定, 超過 12 吋就不是小筆電啦!) 但它神奇的地方應該是他可以硬解 HD 影片, 這是所有搭配 945GSE 的小筆電所做不到的.

當初會選 AO751 當自己的個人工作機就是因為它搭配的是 Intel US15W Poulsbo 這個晶片組, 加上 11.6" 1366x768 的大螢幕 , 也預裝了 Cyberlink 專門為 US15W 所作的 codec, 加上 PowerDVD 這個軟體, 雖然 CPU 時脈只有 1.2GHz, 但看起 720P 的影片可是一點都不會有頓頓的感覺, 可以說是一個最大小適中 (其它的都是 10.1" 以內) 的 HD 小筆電, 加上高達 6 個多小時的電池, 這台真的是工作及娛樂兼顧的小筆電.

在小筆電上要享受到 HD 影片不外乎要下列須求:

1. 硬體:
- 要有至少 1280x720 的螢幕, 當然越大越好.
- 要能硬解 MPEG2 或 H.264

2. 軟體:
- 要安裝能搭配硬體的 codec.
- 播放軟體.

3. HD 影片檔

在市面上的小筆電不是沒硬解的功能, 就是螢幕不夠大, 要不然就是沒有預裝好軟體, 所以看 720p 以上的 HD 影片 CPU 就直衝 100%, 而且還播的有氣無力, AO751 符合了第一及第二條件, 尤其是第二, 在大部分的小筆電都安裝 XP 的情況下, 預裝好能硬解的 codec 可省下了不少麻煩, XP 可不像在 Windows 7 一樣, 有一個比較完整的 DXVA 架構, 在 XP 下硬解 codec 的實作可要費不少工夫.

第三就比較傷腦筋了, 如果要 "正當" 取得 HD 影片, 現在大概只有兩個地方是可以下載的到的, 第一就是 YouTube, 第二就是 QuickTime 的網站了, 但就算這樣還是不夠, 因為 PowerDVD 只能播影片檔案, 不能從 browser 裡直接播, 所以要怎麼從 YouTube 及 QuickTime 網站下載就是重點了.

方法還是有的, 那就是用 FireFox 加一些外掛抓, 我們就來看看要怎麼抓吧.

1. 下載及安裝 FireFox, 如果你還沒用 FireFox, 那你就真的沒跟上時代了.
- 在 www.getfirefox.com 下載 FireFox.

2. 開啟 FireFox 後, 到這裡安裝 UnPlug 的 Add-on (就是外掛):
- 也有其它相類似的 FireFox 外掛, 但像 UnPlug 這樣 FlashVideo & QuickTime 通吃的不多.

3. 安裝好後, 重新啟動 FireFox.

4. 到 YouTube 網站, 找一個有 HD 格式的影片. 按下那個有 HD icon 的連結.

5. 跳到那個影片後, 在 FireFox "工具" 選單裡, 點選 UnPlug.


6. 在 UnPlug 的清單中, 選 "High Definition" 下載:

7. 下載好檔案後, 用 PowerDVD 開啟, 就可以看到非常順暢的 HD 影片了!

8. 用同樣的步驟, 也可以下載任何其它的 Flash Video 的 HD 影片, 只是要記得一定得是 HD 的格式 (就是 H.264).

9. 也可以用同樣的步驟, 到任何一個 QuickTime HD Movie 的網頁, 下載 HD 影片.
- 這裡是 "玩具總動員 3" 的 1080p 預告片. 從頭播到尾 CPU 大部都在 40% 以下, 最高也幾乎都沒超過 60%!

你也可以耍酷, 同時播兩個 720p 的影片也不會是問題!

如果您也買了 AO751 的話, 快點去享受 HD 影片所帶來的震撼吧!