【ffmpeg for wince】音视频编解码多平台移植(for window/wince))ffmpeg
from: http://www.cnblogs.com/windwithlife/archive/2009/05/31/1492728.html
終于完成了了第二個Client side原型(for Wince),其中花掉我最多時間的就是ffmpeg的對WINCE的移植。其中有大半時間是由于網(wǎng)上的一些不完整及不正確信息所誤導(dǎo),但是沒有這些零星的信息,我可能花費(fèi)更多的時間。現(xiàn)在我把自己的移植過程分享給大家,我盡量做到事無巨細(xì),也好讓大家少走彎路,省去我們程序員們的時間。那可是大把的銀子與信心浪費(fèi)。呵呵,書歸正傳。
???? 一,第一個想法,仍像從前移植平臺代碼一樣,先找到這種跨平臺代碼的自己的特定平臺的make文件或工程:
可惜沒有發(fā)現(xiàn)ffmpeg 有for windows 及 for wince的make 及工程。再細(xì)讀 ffmpeg的官方網(wǎng)站,讓人仰天大笑,其中說到,由于VC/Visual studio 開發(fā)環(huán)境的編譯器,對C99支持不好,而ffmpeg又是follow這些C語言規(guī)范寫的,因此,不支持VC/VS的編譯器。這比一些跨平臺項(xiàng)目說windows OS is silly OS, not popular POSIX 從而不支持的說法更有趣。其實(shí),從IT行業(yè)而言,這些理由都不是那么的合邏輯,也不夠嚴(yán)謹(jǐn)。但代碼是別人寫的。我們又能如何呢?呵呵。
??? 二,曲徑通幽,既然ffmpeg不支持windows的編譯器,那我們還有一個曲折的辦法,它不是支持POSIX嘛 ,也就是支持linux/unix嘛 ,那我們就有了我們的辦法,我們的windows平臺上的linux編譯器(算一種交叉編譯吧,呵呵)于是大家想到了Cyxwin及 Mingw+Msys,其它,Cyxwin中編譯出windows的平臺上可用的庫,還是調(diào)用了Mingw的編譯器,于是我們就直接研究Mingw +Msys吧,但是這個東東有一個致命的弱點(diǎn),就是要安裝,分別要更新一堆組件,更新到什么版本呢,天知道,都用最新的吧。去相關(guān)的網(wǎng)站去下載他們(http://)不過Mingw的 sourceforge 網(wǎng)站真不是人去的,里面亂放,而且目錄沒有一個明確的索引,網(wǎng)站又慢,我是花了一天時間才找齊,后來發(fā)現(xiàn)ffmpeg有一個說明網(wǎng)頁,可以明確下載。請參看(http://ffmpeg.arrozcru.org/wiki/index.php?title=MSys_MinGW)其中下載地址我再列一下,以方便大家:
Mingw: http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=240780&release_id=595197
Mingw插件更新:
????????? http://prdownloads.sourceforge.net/mingw/binutils-2.18.50-20080109-2.tar.gz?download
????????? http://prdownloads.sourceforge.net/mingw/mingwrt-3.15.1-mingw32-dll.tar.gz?download
????????? http://prdownloads.sourceforge.net/mingw
??????????http://prdownloads.sourceforge.net/mingw/w32api-3.13-mingw32-dev.tar.gz?download
最穩(wěn)定的gcc編譯器for mingw插件:
???????? http://prdownloads.sourceforge.net/mingw/gcc-core-3.4.5-20060117-1.tar.gz?download
?????????http://prdownloads.sourceforge.net/mingw/gcc-g++-3.4.5-20060117-1.tar.gz?download
至于安裝過程,網(wǎng)上搜一下,不會有問題can't miss it
?????? MSys:http://prdownloads.sourceforge.net/mingw/MSYS-1.0.11-2004.04.30-1.exe?download
相關(guān)插件更新:
???????http://prdownloads.sourceforge.net/mingw/MSYS-1.0.11-20080821-dll.tar.gz?download
?????? http://prdownloads.sourceforge.net/mingw/bash-3.1-MSYS-1.0.11-snapshot.tar.bz2?download
?????? http://prdownloads.sourceforge.net/mingw/coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2?download
?????? http://prdownloads.sourceforge.net/mingw/make-3.81-MSYS-1.0.11-2.tar.bz2
?????? 至一Msys的安裝及與Mingw整合在一起,網(wǎng)上查一下,can't miss it,
三 , 開始for windows的ffmpeg編譯。這個ffmpeg論壇上倒有相關(guān)的指導(dǎo)。請參照:
http://ffmpeg.arrozcru.org/wiki/index.php?title=Static
這里有一個靜態(tài)庫的編譯。按向?qū)瓿删幾g成靜態(tài)lib庫,可以址接進(jìn)行編譯鏈接到 windows項(xiàng)目中(only for windows平臺,not for wince),好放到一個新的window項(xiàng)目中,編譯成功,鏈接,一堆的庫找不到,哈哈,仰天大笑,用工具一查相關(guān)引用,原來這些找不到函數(shù),還在mingw的庫中,也就是說要在項(xiàng)目中用ffmpeg的靜態(tài)庫,你還要搭上一堆mingw的庫,就像現(xiàn)在市場上的搭配銷售。再笑,我先找個地方睡半天,緩解我的想扁人的沖動。
睡醒之后,換種用法,我編動態(tài)庫,這下你不會不把我的所有函數(shù)給我加到我的DLL里吧,再換了一些ffmpeg的./configure參數(shù)。搞定。生成了動態(tài)庫,及l(fā)ib.用到項(xiàng)目里,編譯通過。不過,這只是萬里長征第一步,我還要最痛苦的for wince的庫。
四,for wince 的ffmpeg:
????? 從linux的代碼用mingw編成 for windows那是人家mingw的任務(wù),我們也只繞了一道彎,for wince的mingw不存在呀,怎么辦,忽然想到linux上的交叉編譯,人家可以在linux用定制的gcc交叉編譯器弄出for wince的庫,那我們何不在Mingw上搞出for wince的庫,一查,網(wǎng)上果然僅有的解決方案,也就是交叉編譯成for wince 的ffmpeg,所用交叉編譯器,大家可以看仔細(xì)了,
網(wǎng)上有絕大多數(shù)的相關(guān)貼子給的交叉編譯器是不正確的(下載的地址不正確)真搞不懂網(wǎng)上一堆人轉(zhuǎn)載別人的文章,也不去驗(yàn)證一下,轉(zhuǎn)載干嘛?,我就是由于用了網(wǎng)上這些人轉(zhuǎn)載地址去下載編不正確的編譯器,浪費(fèi)了3天的時間,無功而返。記住,下載的交叉編譯器是 cegccmingw 下載地址是:()
進(jìn)行編譯。編譯最新的庫,會有一些匯編通不過。自己對匯編不熟悉,不過要是在linux上交叉編譯應(yīng)該沒問題,有興趣的話,可以自己試那個環(huán)境,那樣的話,用的交叉編譯器就應(yīng)該是cegcc.
沒辦法,為了節(jié)省我的時間,我可是要在兩周內(nèi)完成三個平臺的原型開發(fā)的。就拿了2007年的ffmpeg來編。其中也改了不少東西才編譯能通過,首先,./configure 之后,在生成的config.mak中,要修改“SLIB_EXTRA_CMD=-lib /machine:i386 /def:$(@:.dll=.def)”為“SLIB_EXTRA_CMD=-lib /machine:arm /def:$(@:.dll=.def)”,及 “EXTRALIBS= -lm”改為“EXTRALIBS= -lm -lws2.lib”,其中編譯過程中采取了perror禁用,有seek函數(shù)禁用與替換(由于沒有用zlib,linux平臺估計(jì)會沒有問題).細(xì)節(jié),可以有時間再寫,有興趣的話,可以加我MSN。
編譯成功后。用在C++環(huán)境中。測試普通函數(shù)通過,不過在視頻編換時,效率不高。
換了一下網(wǎng)上的別人編譯的ffmpeg庫,(網(wǎng)上有一個下載,不過此SDK在wince上用時,用在C++項(xiàng)目中有問題。頭文件中有重復(fù)定義,解決辦法是放在.c文件中,由Cpp文件來調(diào)用,這樣可以規(guī)避這些問題,但這樣就存在了一些全局變量.這樣的頭文件是不能用在Sybmian平臺的。
?
另外一種思路就是不用ffmpeg.用Xvid解 mpeg4(測試下來效率好像要高于ffmpeg,畢竟是專門for mpeg4),用xh264解 H264,拿過他們的源代碼一看,還是人家這跨平臺,現(xiàn)成的for windows平臺的工程make文件,這才是真正的跨平臺。當(dāng)然想要更多功能,ffmpeg地位還是無人能及。
如果有人對編解碼做簡單的跨平臺移植有興趣,可以加我MSN一起學(xué)習(xí)探計(jì),相互學(xué)習(xí),搞技術(shù)嘛,大家一起共享信息,會省掉多少人的多少個不眠之夜,我就是因?yàn)橐恍┬畔⒌牟粶?zhǔn)確,害得我移了一周,每天可都工作到凌晨2點(diǎn)多。
好了,今天就寫到這里,至于Symbian平臺的移植,改天再寫。
總結(jié)
以上是生活随笔為你收集整理的【ffmpeg for wince】音视频编解码多平台移植(for window/wince))ffmpeg的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Opencv获取身份证号码区域
- 下一篇: 【ffmpeg for wince】音视