史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 多媒體影音轉檔燒錄技術文件
忘記密碼?
論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2006-03-02, 05:42 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 ffdshow CVS 編譯基礎教學

毫無疑問,ffdshow 是一款很優秀的綜合性高效率的 DirectShow 編碼/解碼/後處理濾鏡,使用來自 ffmpeg project 的 libavcodec (也可以使用 XviD 的 VFW 核心) 進行視瀕解碼,後處理功能程式碼則來自 mplayer,可以相當程度的增強低碼率影片的播放品質,進入 2004 年後,更是大大的強化了音瀕解碼能力和視瀕編碼能力,套用面得到了進一步的拓展

  ffdshow 的作者 milan cutka 是公認的 DirectShow 編程的牛人之一,我對他的印象則是一個有點瘋狂、有點可愛、有時候也馬馬虎虎的傢伙,^_*

  在我的角度來看,ffdshow 是一個足夠複雜的 project,現在涉及的源文件已經達到了兩千三百多個,而且隨著功能的進一步擴充和強化顯然還在不斷的增長,而隨著功能的不斷強化和新功能、功能改進的計劃,對於這樣一個複雜的 project 來說,顯然 debug 成了一個相當重要的工作,所以自上一次(2004.10.12)發怖官方的 binary 之後,一直到現在也沒有正式發怖一個官方認可的穩定版本,而看著 CVS 和 change log 中的改進,例如更多 4cc 的支持、穩定性、相容性、效能的改進、neroavc 的完美支持等等,是很讓人眼饞的

   引用 nemolus
玲音 san, 如果 ffdshow 編譯不算太麻煩的話可不可以講解以下如何編譯 ffdshow 呀 , doom9 的強人總是時不時編譯一下, 雖然如果要公佈總是以穩定為首, 但看著 cvs 更新也只能乾瞪眼 @@.

  好在 ffdshow 的來源碼管理採用了 CVS 方式,milan 會隨時將更新的來源碼上傳到 SourceForge 的 CVS 伺服器上,任何愛好者都可以通過匿名的方式取得全部的來源碼自行編譯,所以才有了去年八月之前 athos 和 andy2222 的編譯版本和去年 10 到現在之間 celitc druid 和我的編譯版本。但是 nemolus sama 說的是,光等著別人來更新,有時候確實挺鬧心的——我就是左等右等不見 milan 更新 binary,而 celitc druid 關於 ICL 的編譯又有一些限制的情況下動意自己編譯的,現在相當於受 nemolus sama 所命,把這段時間以來的一些經驗和想法在這裡聊聊,說明 感興趣的朋友們打造出自己編譯的 ffdshow,順便贊一下 Open Source 軟體的好處


--------------------------------------------------------------------------------

一、環境與工具的準備

  所謂工欲善其事,必先利其器,所以在進行工作之前,我們首先要檢查一下自己的系統環境是否合適,需要的工具是否齊備

  系統環境:最新版本的 Win2000/XP/2003,並且驗證自己的 DirectX 和 Windows Media Player 版本是最新的,同時為了更方便的測試編譯後的 ffdshow 的效果和為作者提交 Bug,我建議你準備一份最新版本的 Media Player Classic,你可以使用 cynix sama 編譯的最新 cvs,如果想使用漢化版本,這裡我也有所準備:http://www.sbtop.com/Soft_Show.asp?SoftID=197,對於 MP4 的支持,還需要一個 MP4 Demuxer,推薦是最新版本的 Nero 裡面附帶的 NDParser.ax,它的好處是可以脫離 Nero 執行而且除了多音軌外,都支持得很完美

  CVS 程式碼下載工具:我使用和推薦的是 TortoiseCVS,下載位址為 http://tortoisecvs.sourceforge.net/download.shtml,當然您使用 WinCVS 也沒什麼問題,原理和操作都差不多,我使用 TortoiseCVS 的唯一原因大概是因為習慣了 ^_*

  ffdshow 來源碼編譯器:ffdshow 的程式碼是使用 C++ 和 ASM 完成的,所以要想編譯成功也需要 C++ 和 ASM 這兩種編譯器,由於我只打算寫一個基礎教學,關於通用性和易用性考慮,這裡就以最大眾化的 MSVC 7.1 (即Microsoft Visual Studio .NET 2003 中的 C++ 部分) 和關於 GPL 的 ASM 編譯器 NASM (下載位址為 http://sourceforge.net/project/show...ackage_id=47034) 編譯器為例

  DirectX SDK:編譯 ffdshow 需要一些來自 DirectX SDK 的基礎類庫,所以我們需要到微軟下載 DirectX 9.0B SDK for C++,這裡要提示一下為什麼使用 9.0B SDK 而不是最新版本的 9.0C SDK:因為 9.0C SDK 的結構有了一些改變,目前編譯不少 DirectShow 程序所需要的 BassClasses 庫居然「沒」了,雖然你也可以通過某些處理或途徑獲得,但是這已經脫離了「基礎」的範圍,所以這裡仍舊以 DirectX 9.0B SDK 為例,下載位址為 http://www.microsoft.com/downloads/...&displaylang=en

  打包和安裝程序製作工具:NSIS,最新版本下載位址為 http://nsis.sourceforge.net/index.p...ID=2&tt_news=18

  好,現在我假設你的東西都已經準備好了,現在請按照預設選項安裝 Microsoft Visual Studio .NET 2003 (可以只安裝 C++ 部分)、DirectX 9.0B SDK for C++、TortoiseCVS 和 NSIS,然後把 NASM 壓縮包中的 nasmw.exe 和 ndisasmw.exe 解壓到你的 Windows 安裝目錄 (我這麼做是為了避免 C++ 編譯器需要使用 NASM 的時候在系統預設的路徑中找不到它,所謂偷懶是也,當然你可以勤快一點,放到你喜歡的任何地方,然後手動指定一下路徑)



二、ffdshow 來源碼的獲取和更新

  首先看一下這裡:http://sourceforge.net/cvs/?group_id=53761

  這裡告訴你了如何獲取 ffdshow 的來源碼,其實最有用的就是初次使用時的就是這兩個指令,用以獲取現用的完整的 ffdshow 來源碼:

   引用
cvs -dserver:anonymous@cvs.sourceforge.net:/cvsroot/ffdshow login

cvs -z3 -dserver:anonymous@cvs.sourceforge.net:/cvsroot/ffdshow co -P modulename

  你可以通過指令行或者 TortoiseCVS 的 GUI 來完成這份工作,我是用指令行完成的——不過由於文件較多(兩千三百多個文件,接近 20M)和伺服器的延遲,初次下載可能是一個比較漫長的程序而且容易中斷,所以這裡我打包了一份截至 2005.1.29 的最新版本的完整來源碼(3M 多一點),你可以直接下載解壓,然後在解壓的資料夾上點擊右鍵(如附圖),利用 TortoiseCVS 右鍵功能表裡面的「CVS Update」功能昇級到最新的程式碼,這些更新一般都很小、很快。同樣,ffdshow 的程式碼幾乎每天都有更新,所以你可以定期利用「CVS Update」功能昇級來源碼到最新版本

   引用 題外話
前面我說過,milan 有時候也是一個馬馬虎虎的人,這次就是,他的 theora 程式碼部分可能忘了調整幾個文件,所以在編譯的時候 ff_treora.dll 這個庫文件可能會失敗,希望大家操作的時候,這個問題已經修正了(我已經反饋給了 milan),哈哈,類似的問題我已經遇見幾次了,milan 說「it happens to me quite often 」,但是修正的速度是很快的。所以某些時候如果你曾經編譯成功過,但是突然發現昇級 cvs 後編譯失敗,那麼就要判斷是不是 milan 的馬虎,然後決定反饋給 milan 或者是等一下,看下次更新如何
  

三、編譯前準備

  現在我假設你已經下載和昇級了完整的 ffdshow cvs 程式碼,不過這時候你還不能馬上編譯它,因為你需要首先編譯出它所需要的 DirectX SDK 中的基礎類庫。

  假設你的 DirectX SDK 安裝在 C:\DXSDK,現在進入 C:\DXSDK\Samples\C++\DirectShow\BaseClasses,雙按文件 baseclasses.vcproj,如果沒有意外的,開啟他的應該是 Microsoft Visual Studio .NET 2003 的 IDE


--------------------------------------------------------------------------------

  看一下上面的圖,決定一下你需要產生的解決方案——由於 ffdshow 是純粹的單字元程序,不支持 Unicode,所以這裡你可以只產生 Debug 和 Release 兩種解決方案,甚至如果你不想編譯 Debug 版本的 ffdshow (用於測試和 Bug 偵錯),那麼只產生 Release 解決方案即可——以後的文字我都是假設你只產生 Release 版本,其他的情況請舉一反三即可

  然後「產生解決方案」

  隨後別忘了看看 Visual Studio .NET 2003 的「工具」功能表,選項裡面的「選項」,檢查「項目」選擇項中的「VC++ 目錄」子選擇項,驗證一下 DXSDK 的庫文件和包含文件路徑已經被正確的指定了,否則一會兒編譯 ffdshow 的時候可能出現找不到包含文件或庫文件的情況



四、編譯

  如果前面的步驟都正常的完成了,就可以正式開始編譯 ffdshow 了,這裡我現在一個假設,就是假設你的 ffdshow 源文件的位置是 D:\ffdshow,這樣方便一會兒的路徑的解釋。

  現在開啟 D:\ffdshow\ffdshow.vcproj (如果你用的是 VC++ 6.0 並且打上了最新的 SP 修正檔,則是開啟 ffdshow.dsp,下同),將「組態方案」設為「Release」——解釋一下,你可能看到有 Debug、Release、ICL Release(這個只是有時候會有) 三個組態方案,除非你只是想專門進行 ffdshow 的功能偵錯和專業測試,才建議你選項「Debug」;而「ICL Release」則是產生 Release 版本,但使用 ICL 進行編譯,ICL 即 Intel C 編譯器,相對來說,產生的軟體在 Intel P3/P4 上面的效率較高,但是在 AMD 的 CPU 上面則很低甚至可能出現錯誤,而且目前還有 AVS 的相容性問題,所以這裡我們只考慮「Release」方案,如果你對 ICL 感興趣,請自行安裝組態相關軟體

  在「解決方案檔案總管」中右鍵按下「解決方案"ffdshow"(18個項目)」,選項「產生解決方案」,然後,耐心等待編譯完成



用 風ソ鈴音
為什麼要說「耐心等待」呢,因為一個不起眼的文件「TomsMoComp_ff.dll」,可以對反交錯起一定的作用,我剛開始的時候曾經連續在這個文件的編譯上鬱悶,每次都是超過五分鍾了編譯器仍然是佔用幾乎 100% 的 CPU,別的什麼也幹不了,我以為文件有錯,就向 milan 抱怨,milan 說「It tooks about 4 minutes on my Barton 3000+. It's interesting how few templates can stress compiler 」發現是自己不夠耐心了,哈哈,後來堅持了七分鍾,終於完成了這個小文件,我的組態是 Athlon XP 2400+ / 512M 記憶體。此外 ffdshow.ax 的編譯也要消耗較長的時間,所以初次編譯的時候,「耐心」是很重要的

  主工程文件 ffdshow.vcproj 編譯完成後,請繼續編譯以下工程文件:

   引用 需要繼續編譯的工程文件
D:\ffdshow\src\ffmpeg\libavcodec.vcproj
D:\ffdshow\src\mplayer\libmplayer_dll.vcproj
D:\ffdshow\src\codecs\x264\ff_x264.vcproj
D:\ffdshow\src\codecs\libmpeg2\libmpeg2_ff.vcproj
D:\ffdshow\src\codecs\mpeg2enc\ff_mpeg2enc.vcproj

  注意每個工程文件的編譯前請把組態方案設為「Release」,以便保持一致——這一點只是在每個文件的初次編譯時需要設一下

  這幾個工程文件編譯完成後,如果不是出現編譯錯誤(註:請忽略所有的編譯警告),整個 ffdshow 就算是編譯完成了,所有的文件都已經被產生於:D:\ffdshow\bin

--------------------------------------------------------------------------------

五、如果編譯時遇到錯誤

  我在前面就說過,milan 是一個有點馬虎的人,而 ffdshow 的 project 足夠複雜,文件眾多,所以有時候更新 cvs 的時候就會出點小錯誤

  以我的經驗,編譯出現錯誤的情況大多數是由於 cvs 更新的問題,通常沒有程序本身的問題,所以這時候你可以選項反饋編譯訊息給 milan,或者等等,看下次 cvs 更新會不會解決這個問題,因為還是有一些人(包括我 ^_*)會及時地反饋這些錯誤的

  當然,如果您有編程的基礎和經驗,可以參考 CVS Update 的 LOG,然後分析一下是何處的問題,自己嘗試解決一下也未嘗不可,我曾經自己解決過工程文件更新不及時的問題,還是蠻簡單的,不過您自己操作的時候記得做好制作備份,別忘了回家的路,嘿嘿

  迄今為止我僅僅遇到一次實實在在的程式碼導致的編譯問題,是由於 milan 在 ffdshow 的字幕引擎程式碼中使用了不為中文版 VC 所接受的東歐字元,後來在我和他的溝通和測試中解決了這個問題——記得那時候我到處 REQ 英文版 VS2003,但是咱們伺服器上面的下載由於地域關係對我來說實在是太慢了,2K/S,哈哈,題外話了


六、封裝和測試

  如果沒有編譯錯誤,就可以進行封裝、安裝和測試了

  進入 D:\ffdshow\bin\distrib,你會看到 ffdshow-addons.bat 和 ffdshow-core.bat,分別用於產生完整版和核心版的 ffdshow,不過可能是由於系統的相容問題或是別的什麼,我使用他們總會出現 NSIS 錯誤,所以我乾脆把 ffdshow.nsis2 這個文件複製了一份,將複製品重新命名為 ffdshow.nsi,直接用 NSIS 編譯 ffdshow.nsi,則完全成功

  需要說明的是,有時使用的是最直接的 VC71 編譯,所以產生的 ffdshow 在執行的時候需要 VC71 執行時刻庫,如果你想要讓別人可以分享你編譯的 ffdshow,那麼你需要同時提供這些執行庫,預設的 Release 版本需要的是 msvcr71.dll 和 msvcp71.dll (如果是 Debug 版本則是 msvcr71d.dll 和 msvcp71d.dll),我為了方便,稍微改造了一下安裝程序指令碼,在複製 ffdshow 本身文件的程式碼之前加入了如下程式碼:

   引用 增加的安裝指令碼程式碼
;Set VC71 lib output path to system directory.
SetOutPath $SYSDIR
SetOverwrite off
File ".\vc71lib\msvcr71.dll"
File ".\vc71lib\msvcp71.dll"
SetOverwrite on

  您可以酌情參考或引用,路徑別忘了改成您實際儲存這兩個文件的路徑

  至於測試,您只需多點播放一些 ffdshow 所支持的文件格式,別忘了同時使用 MPC 和 WMP 進行測試,哈哈,如果都正常的話,那麼恭喜您,您基本上成功了


基本上算是完成了,在各位達人面前實在是班門弄斧,只是希望各位達人不吝賜教和斧正,給眾多喜歡 ffdshow 的朋友一個 DIY 的機會
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
舊 2006-03-03, 01:34 AM   #2 (permalink)
註冊會員
榮譽勳章
UID - 77775
在線等級: 級別:5 | 在線時長:48小時 | 升級還需:12小時級別:5 | 在線時長:48小時 | 升級還需:12小時級別:5 | 在線時長:48小時 | 升級還需:12小時級別:5 | 在線時長:48小時 | 升級還需:12小時級別:5 | 在線時長:48小時 | 升級還需:12小時
註冊日期: 2003-06-15
VIP期限: 2007-10
文章: 57
精華: 0
現金: 5129 金幣
資產: 5329 金幣
預設

感謝轉貼好文章,雖然沒法一下全部都了解!
tomlabtw 目前離線  
送花文章: 9, 收花文章: 2 篇, 收花: 2 次
 


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 11:10 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2022, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1