【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的移植。其中有大半時間是由于網上的一些不完整及不正確信息所誤導,但是沒有這些零星的信息,我可能花費更多的時間。現在我把自己的移植過程分享給大家,我盡量做到事無巨細,也好讓大家少走彎路,省去我們程序員們的時間。那可是大把的銀子與信心浪費。呵呵,書歸正傳。

???? 一,第一個想法,仍像從前移植平臺代碼一樣,先找到這種跨平臺代碼的自己的特定平臺的make文件或工程:

可惜沒有發現ffmpeg 有for windows 及 for wince的make 及工程。再細讀 ffmpeg的官方網站,讓人仰天大笑,其中說到,由于VC/Visual studio 開發環境的編譯器,對C99支持不好,而ffmpeg又是follow這些C語言規范寫的,因此,不支持VC/VS的編譯器。這比一些跨平臺項目說windows OS is silly OS, not popular POSIX 從而不支持的說法更有趣。其實,從IT行業而言,這些理由都不是那么的合邏輯,也不夠嚴謹。但代碼是別人寫的。我們又能如何呢?呵呵。

??? 二,曲徑通幽,既然ffmpeg不支持windows的編譯器,那我們還有一個曲折的辦法,它不是支持POSIX嘛 ,也就是支持linux/unix嘛 ,那我們就有了我們的辦法,我們的windows平臺上的linux編譯器(算一種交叉編譯吧,呵呵)于是大家想到了Cyxwin及 Mingw+Msys,其它,Cyxwin中編譯出windows的平臺上可用的庫,還是調用了Mingw的編譯器,于是我們就直接研究Mingw +Msys吧,但是這個東東有一個致命的弱點,就是要安裝,分別要更新一堆組件,更新到什么版本呢,天知道,都用最新的吧。去相關的網站去下載他們(http://)不過Mingw的 sourceforge 網站真不是人去的,里面亂放,而且目錄沒有一個明確的索引,網站又慢,我是花了一天時間才找齊,后來發現ffmpeg有一個說明網頁,可以明確下載。請參看(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

最穩定的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

至于安裝過程,網上搜一下,不會有問題can't miss it

?????? MSys:http://prdownloads.sourceforge.net/mingw/MSYS-1.0.11-2004.04.30-1.exe?download

相關插件更新:

???????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整合在一起,網上查一下,can't miss it,

三 , 開始for windows的ffmpeg編譯。這個ffmpeg論壇上倒有相關的指導。請參照:

http://ffmpeg.arrozcru.org/wiki/index.php?title=Static

這里有一個靜態庫的編譯。按向導完成編譯成靜態lib庫,可以址接進行編譯鏈接到 windows項目中(only for windows平臺,not for wince),好放到一個新的window項目中,編譯成功,鏈接,一堆的庫找不到,哈哈,仰天大笑,用工具一查相關引用,原來這些找不到函數,還在mingw的庫中,也就是說要在項目中用ffmpeg的靜態庫,你還要搭上一堆mingw的庫,就像現在市場上的搭配銷售。再笑,我先找個地方睡半天,緩解我的想扁人的沖動。

睡醒之后,換種用法,我編動態庫,這下你不會不把我的所有函數給我加到我的DLL里吧,再換了一些ffmpeg的./configure參數。搞定。生成了動態庫,及lib.用到項目里,編譯通過。不過,這只是萬里長征第一步,我還要最痛苦的for wince的庫。

四,for wince 的ffmpeg:

????? 從linux的代碼用mingw編成 for windows那是人家mingw的任務,我們也只繞了一道彎,for wince的mingw不存在呀,怎么辦,忽然想到linux上的交叉編譯,人家可以在linux用定制的gcc交叉編譯器弄出for wince的庫,那我們何不在Mingw上搞出for wince的庫,一查,網上果然僅有的解決方案,也就是交叉編譯成for wince 的ffmpeg,所用交叉編譯器,大家可以看仔細了,

網上有絕大多數的相關貼子給的交叉編譯器是不正確的(下載的地址不正確)真搞不懂網上一堆人轉載別人的文章,也不去驗證一下,轉載干嘛?,我就是由于用了網上這些人轉載地址去下載編不正確的編譯器,浪費了3天的時間,無功而返。記住,下載的交叉編譯器是 cegccmingw 下載地址是:()

進行編譯。編譯最新的庫,會有一些匯編通不過。自己對匯編不熟悉,不過要是在linux上交叉編譯應該沒問題,有興趣的話,可以自己試那個環境,那樣的話,用的交叉編譯器就應該是cegcc.

沒辦法,為了節省我的時間,我可是要在兩周內完成三個平臺的原型開發的。就拿了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函數禁用與替換(由于沒有用zlib,linux平臺估計會沒有問題).細節,可以有時間再寫,有興趣的話,可以加我MSN。

編譯成功后。用在C++環境中。測試普通函數通過,不過在視頻編換時,效率不高。

換了一下網上的別人編譯的ffmpeg庫,(網上有一個下載,不過此SDK在wince上用時,用在C++項目中有問題。頭文件中有重復定義,解決辦法是放在.c文件中,由Cpp文件來調用,這樣可以規避這些問題,但這樣就存在了一些全局變量.這樣的頭文件是不能用在Sybmian平臺的。

?

另外一種思路就是不用ffmpeg.用Xvid解 mpeg4(測試下來效率好像要高于ffmpeg,畢竟是專門for mpeg4),用xh264解 H264,拿過他們的源代碼一看,還是人家這跨平臺,現成的for windows平臺的工程make文件,這才是真正的跨平臺。當然想要更多功能,ffmpeg地位還是無人能及。

如果有人對編解碼做簡單的跨平臺移植有興趣,可以加我MSN一起學習探計,相互學習,搞技術嘛,大家一起共享信息,會省掉多少人的多少個不眠之夜,我就是因為一些信息的不準確,害得我移了一周,每天可都工作到凌晨2點多。

好了,今天就寫到這里,至于Symbian平臺的移植,改天再寫。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455529.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455529.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455529.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java 重寫(Override)與重載(Overload)

重寫(Override) 重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫!返回值和形參都不能改變。即外殼不變,核心重寫! 重寫的好處在于子類可以根據需要,定義特定于自己的行為。也就是說子類能夠根據需要實現父類的方法。在面…

銀聯pos小票word模板_商家pos機刷卡必須知道的知識

相信很多卡友伙伴或者商鋪店家都裝有pos機,然后一般pos機都沒有使用說明書,更沒有結合刷卡方法在內的秘籍。今天我就分享下刷卡必須知道的一些知識。剛剛辦理pos機的當天一定要注意:使用之前呢,務必核對一下基本信息,例…

《Ext JS權威指南》——2.4節關于Ext.onReady

2.4 關于Ext.onReady 代碼為什么寫在Ext.onReady中,而不是在body中添加一個onload事件并在onload事件中運行呢?主要原因是Ext.onReady在DOM模型加載完畢后即可進行操作,而無需像onload事件那樣,等待頁面的所有資源都加載完畢后才…

git push 提交時顯示 Empty reply from server的解決辦法

輸入 git fetch origin --prune 參考鏈接:https://stackoverflow.com/questions/28364023/gits-error-on-push-empty-reply-from-server 轉載于:https://www.cnblogs.com/team42/p/6941678.html

轉]移動視頻監控(1)---項目綜述

對于市場上的視頻監控系統,大家都有一定的了解,就是視頻采集,經過無線/有線發送到服務或代理,客戶從服務或代理上得到視頻/音頻流。不復雜。 對于不遠的將來,3G,4G的到來,對移動的業務有一個推動…

java 空接口_學Java,java接口搞明白了嗎?大牛讓你一文搞清楚

前言對于面向對象編程來說,抽象是一個極具魅力的特征。如果一個程序員的抽象思維很差,那他在編程中就會遇到很多困難,無法把業務變成具體的代碼。在 Java 中,可以通過兩種形式來達到抽象的目的,一種是抽象類&#xff0…

Check Point CEO:“我們正在積極尋找收購目標”

Check Point Sofrware Technologies很可能成為下一個會產生收購案的主流安全廠商,首席執行官Gil Shwed在該公司第二季度財報電話會議上這樣表示。 “我們正在積極地尋求收購目標,期待無論是大規模的還是小規模的擴張,”Shwed表示。“我們在并…

Spark SQL 編程API入門系列之SparkSQL數據源

不多說,直接上干貨! SparkSQL數據源:從各種數據源創建DataFrame 因為 spark sql,dataframe,datasets 都是共用 spark sql 這個庫的,三者共享同樣的代碼優化,生成以及執行流程,所以 s…

H.264中的一些易混淆概念

Q:PSNR 峰值信噪比 Q:是根據它來取qp是不是? A:不是, 和QP沒有直接關系, 但是QP的選擇會影響到PSNR Q: 如果不用率失真最優化, 為什么選擇SATD+deltar(mv,mode)作為模式選擇的依據?為什么運…

Java中final關鍵字的幾種用法

在java的關鍵字中,static和final是兩個我們必須掌握的關鍵字。不同于其他關鍵字,他們都有多種用法,而且在一定環境下使用,可以提高程序的運行性能,優化程序的結構。下面我們來了解一下final關鍵字及其用法。 final關鍵…

python pyqt5安裝_Python3 安裝PyQt5及exe打包圖文教程

環境: Python 3.6.4 Pycharm Professional 2017.3.3 PyQt5 PyQt5-tools① Python 3 安裝Python 3.x 安裝時,默認勾選ADD Python 3.6 to PATH和ADD Python to environment variables的情況下,系統會向path中增加以下兩個環境變量。D:\Program Files\Py…

《企業軟件交付:敏捷與高效管理精要》——3.4 企業軟件交付的軟件工廠方法...

3.4 企業軟件交付的軟件工廠方法 正如我們前面討論的,今天的機構面對的商業環境正以前所未有的速度發生變化。與此同時,這些機構還要管理和降低整個機構的運營成本。這就直接意味著,他們不僅要最大限度地減少浪費和低效率,還要提…

201706問題記錄

1.四周陰影 box-shadow:0px 0px 10px #f5f5f5; 2. 原生setattribute()方法 jquery的attr()$(.fd-sq-zk).attr("title","收起"); 3.在iframe中獲取外層容器的元素 屬性等 $(parent.document).find("html")..... 4.監聽頁面變大變小事件 /…

一致性hash算法_(圖文案例)一致性哈希算法詳解 一點課堂(多岸教育)

一致性Hash算法關于一致性Hash算法,在我之前的博文中已經有多次提到了,MemCache超詳細解讀一文中”一致性Hash算法”部分,對于為什么要使用一致性Hash算法、一致性Hash算法的算法原理做了詳細的解讀。算法的具體原理這里再次貼上:…

《HTML5 Canvas游戲開發實戰》——2.1 繪制基本圖形

本節書摘來自華章計算機《HTML5 Canvas游戲開發實戰》一書中的第2章,第2.1節,作者:張路斌著, 更多章節內容可以訪問云棲社區“華章計算機”公眾號查看。 2.1 繪制基本圖形 所謂基本圖形,就是指線、矩形、圓等最簡單的圖形&#x…

如何查看Ubuntu版本

有時候需要查看一下系統安裝的Ubuntu的版本,最簡單的方式是輸入lsb_release -a。whatis lsb_release輸出:print distribution-specific information。所以lsb_release這個命令就是用來輸出發行版的信息的。 Open the Terminal enter:lsb_release -a It w…

linux下.a/.so/.la目標庫區別

在linux平臺上編譯時,常會遇到目標庫的疑問,有靜態庫也有動態庫,單個理解都不太難,但是對復雜的工程而言,一旦混合到一起去,對整個工程的理解和調用,將會造成很大困擾,本文就匯總這幾…

python 二元函數繪制_Python繪制二元函數曲面

微實踐:繪制二元函數曲面我們將演示如何借助于ufunc的廣播運算計算下述二元函數的在一個xy平面上的值并將其繪制成3D曲面。其中,x和y的取值范圍均為[-2,2]。為了達到目的,我們需要一個二維的結果數組z,其元素的下標對應參數x,y的取…

Npgsql使用入門(三)【批量導入數據】

Program.cs代碼: class Program{static void Main(string[] args){var test new PgBulkCopyHelper<SingleBuilding>("bld_amap_gzmain");foreach (string pName in test.PropNames){Console.WriteLine("name: {0},\t\ttype: {1}", pName, test.Prop…

遠程網絡視頻監視技術

目前要實現廣域網視頻監視&#xff0c;主要通過三種方式實現&#xff1a;1.硬盤錄像機&#xff1b;2.網絡視頻服務器&#xff1b;3.網絡攝像機。 硬盤錄像機是一個以錄像為主的設備&#xff0c;有的可以支持IE瀏覽。網絡視頻服務器一般前端不錄像&#xff0c;直接將影像傳輸到…