【ffmpeg for wince】音視頻編解碼多平臺移植(for window/wince)

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平臺的移植,改天再寫。

大家正在看
  • ASP.NET中如何實現FORM認證登錄
  • Ext封裝(二)
  • sqlplus登錄命令
  • 談談UNIX如何管理磁盤
  • 志大才疏與工程性
  • 移動設備管理(MDM)與OMA(OTA)DM協議向導(三)——AAA服務器
  • JTree操作API
  • 生活定律
  • 【ffmpeg for wince】音視頻編解碼多...
  • junit4 單元測試
?

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

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

相關文章

python實現猴子爬山算法

猴子爬山一只頑猴在一座有N級臺階的小山上爬山跳躍。上山時需從山腳至山頂往上跳N級臺階&#xff0c;一步可跳1級&#xff0c;或跳3級&#xff0c;求上山有多少種不同的跳法&#xff1f; &#xff08;N<50&#xff09; 問題分析: 每一次都可以選擇1,2,3有3種跳法 方法1 直…

指針版 單鏈表復習

#include <bits/stdc.h> #define P pair<int,int> using namespace std;typedef long long LL;typedef struct LNode{int data;struct LNode *nxt; }LNode,*LinkList;bool Linklist_init(LinkList &root){root new LNode; ///分配頭結點&#xff0c;指針域為空…

手寫springboot_Spring Boot 入門教程 | 圖文講解

目錄一、Spring Boot 是什么二、為什么要使用 Spring Boot三、快速入門3.1 創建 Spring Boot 項目3.2 項目結構3.3 引入 Web 依賴3.4 編寫第一個接口3.5 啟動程序&#xff0c;驗證效果四、總結五、GitHub 示例代碼一、Spring Boot 是什么以下截圖自 Spring Boot 官方文檔&#…

lunix 安裝python3

Linux下默認系統自帶python2.6的版本&#xff0c;這個版本被系統很多程序所依賴&#xff0c;所以不建議刪除&#xff0c;如果使用最新的Python3那么我們知道編譯安裝源碼包和系統默認包之間是沒有任何影響的&#xff0c;所以可以安裝python3和python2共存 首先去python官網下載…

手機音視頻應用開發(專注于Symbian、iPhone、Android等跨平臺音視頻應用開發方案)

一款好的手機應用&#xff0c; 能讓用戶在第一分鐘就愛上他&#xff0c; 一款爛的手機應用&#xff0c; 能讓用戶在第一分鐘就要卸載它。 好的應用必須的穩定、快速。市場日益激勵&#xff0c;一個項目的周期是一個漫長的過程&#xff0c;投入的時間、精力、費用。一筆龐大的預…

Colemak布局的實現 Window+Linux+Android

Colemak布局的實現 WindowLinuxAndroid title: ‘Colemak布局的實現’ subtitle: ‘一個極客的鍵盤布局’ tags: entertainment solution 前言 大部分同學使用的鍵盤布局都是QWERTY布局 而科學研究表明,可能這個設計不是最高效率的布局,甚至的有意為了降低打字的效率而研究的…

機器學習之樸素貝葉斯法

轉載請注明出處&#xff1a;http://www.cnblogs.com/Peyton-Li/ 樸素貝葉斯法是機器學習模型中一個比較簡單的模型&#xff0c;實現簡單&#xff0c;比較常用。 是定義在輸入空間上的隨機向量&#xff0c;是定義在輸出空間上的隨機變量。是和的聯合概率分布。訓練數據集由獨立同…

如何讓梯形變成平行四邊形_開放的課堂 創新的天地——平行四邊形的面積教學片段與反思...

一、 課題的確定學生在三年級學過長方形、正方形的面積計算&#xff0c;經歷過從數方格的辦法得出面積計算公式的過程。因此&#xff0c;學生對于面積計算公式的推導有一定的經驗和知識基礎。基于上述考慮&#xff0c;我想完全放手讓學生去研究如何計算平行四邊形的面積。這對學…

bzoj1670【Usaco2006 Oct】Building the Moat 護城河的挖掘

1670: [Usaco2006 Oct]Building the Moat護城河的挖掘 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 387 Solved: 288[Submit][Status][Discuss]Description 為了防止口渴的食蟻獸進入他的農場&#xff0c;Farmer John決定在他的農場周圍挖一條護城河。農場里一共同擁有N(8…

音視頻編解碼的一些源代碼

音視頻編解碼的一些源代碼 &#xff08;轉&#xff09;資料名稱&#xff1a;音視頻編解碼的一些源代碼 資料成文時間&#xff1a;不詳 語言&#xff1a;英文 頁數&#xff1a;很多 何人所著&#xff08;來源&#xff09;&#xff1a; 文件格式&#xff1a;原代碼 開發工具:vc 說…

Vue之組件之間的數據傳遞

Vue的組件作用域都是孤立的&#xff0c;不允許在子組件的模板內直接引用父組件的數據&#xff0c;必須使用特定的方法才能實現組件之間的數據傳遞。 下列為在vue-cli創建項目中的操作 一父組件向子組件傳遞數據 在Vue中&#xff0c;用props向子組件傳遞數據。 子組件部分&#…

偶然發現一個大佬寫的 React 腳手架,叫Moderate, 用起來很方便

發現一個大佬寫的 React 腳手架&#xff0c;叫Moderate, 用起來很方便 Moderate&#xff0c;意思為適中的&#xff0c;適度的&#xff0c;用這個作為代號&#xff0c;主要取決于他的本名“中用”&#xff0c;其一以貫之的想法就是中庸&#xff0c;秉承著以人為本的態度&#xf…

案例 自動辦公_1300張辦公系列前臺參考圖,請您查收!

設計情報局室內設計師的靈感聚集地關注一個有格調的空間必定有一處高顏值的前臺漂亮的前臺很重要...是空間給人的第一印象一個獨一無二的前臺設計還可以提升整個空間的氣質與逼格連個漂亮的前臺都沒有作為顏控界扛把子的設計師們還怎么混&#xff1f;SO今天小編給大家帶來一份《…

iframe里面的元素觸發父窗口元素事件的jquery代碼 轉

例如父窗口定義了一個事件。 top: $(dom1).bind(topEvent, function(){}); 那么iframe里面的元素怎樣觸發父窗口dom1的事件呢&#xff1f;這樣嗎&#xff1f; $(dom1, parent.document).trigger(topEvent); 看似正確&#xff0c;實則誤導人。 因為父窗口的jquery對象與iframe里…

mplayer 所支持的音視頻編解碼

這里我把mplayer 所支持的音視頻編解碼都羅列出來&#xff0c;方便大家查閱&#xff1b;-----------------------------------------------------------------------------------------------Video codecs:Working video codecscodec namefourcccodecfileoutcommentsFFmpeg Zip…

使用ifconfig取出網卡eth0的ip地址

方法1&#xff1a;sed命令12[rootoldboyedu ~]# ifconfig eth0 |sed -n 2p |seds#^.*addr:##g|sed s# B.*$##g10.0.0.50方法2&#xff1a;cut12[rootoldboyedu ~]# ifconfig eth0|grep inetaddr|cut -d ":" -f2|cut -d " " -f110.0.0.50方法3&#xff1a;…

目標檢測_目標檢測 | Anchor free的目標檢測進階版本

今天說的是《Soft Anchor-Point Object Detection》&#xff0c;其也是最近關于anchor free的目標檢測的論文&#xff0c;作者來自于CMU&#xff0c;一作同樣也是FSAF(2019 CVPR)的作者。該論文的出發點還是在樣本選擇和FPN特征選擇層面。背景Anchor free是目標檢測領域的一個研…

Colly實現豆瓣電影Top250爬取

使用 Colly 實現 豆瓣電影Top250爬取 package mainimport ("encoding/csv""github.com/PuerkitoBio/goquery""github.com/gocolly/colly""log""os""strings""time" )type Movie struct {idx string…

homework1

一.什么是RUP?二.什么是XP?三.什么是敏捷過程&#xff1f; 一。什么是RUP?RUP是一種完整而且完美的軟件過程 1。最佳實踐 &#xff08;1&#xff09;迭代式開發 &#xff08;2&#xff09;管理需求 &#xff08;3&#xff09;使用基于構件軟件的體系結構 &#xff08;4&…

編程:休息片刻的好處

原文作者 Axel Rauschmayer 是一位居住在德國慕尼黑的自由軟件工程師。他在這篇博文列舉了在編程期間休息片刻的一些好處。 你會更精明而不是更賣力地工作。我曾經為了一個功能的實現而賣力工作過。每天12小時&#xff0c;整整工作了兩個星期。我付出了很多努力。那兩個星期之…