ffmpeg庫(kù) 如何使用ndk編譯ffmpeg靜態(tài)庫(kù)?
如何使用ndk編譯ffmpeg靜態(tài)庫(kù)?這是一個(gè)有點(diǎn)復(fù)雜的問(wèn)題,安卓本質(zhì)上是個(gè)linux,完全可以把opencv編譯成靜態(tài)庫(kù)。要實(shí)際操作才知道怎么搞。是不是你包含的頭文件是2.9的,3.0的版本接口變了
如何使用ndk編譯ffmpeg靜態(tài)庫(kù)?
這是一個(gè)有點(diǎn)復(fù)雜的問(wèn)題,安卓本質(zhì)上是個(gè)linux,完全可以把opencv編譯成靜態(tài)庫(kù)。要實(shí)際操作才知道怎么搞。是不是你包含的頭文件是2.9的,3.0的版本接口變了,
假設(shè)題主的環(huán)境中安裝了AS,并使用AS的管理工具安裝了CMAKE ,NINJA,NDK等環(huán)境。1、將上述代碼保存到bat文件中,并修改相關(guān)目錄路徑。
2、下載opencv源碼,將腳本復(fù)制到 OpenCV源碼同級(jí)的目錄下,如果能知道cmake的-H是指定源碼路徑,-B是指定構(gòu)建目錄。
3、執(zhí)行這個(gè)腳本,正常的話會(huì)在buildarmeabi-v7a 下生成ninja工程,ninja是類似Linux gcc中的make程序一樣功能的東西。
4、打開(kāi)cmd ,cd 到buildarmeabi-v7a 目錄,然后執(zhí)行E:binsdkcmake3.6.4111459binninja 開(kāi)始編譯構(gòu)建opencv。
5、正常的話,等待編譯之后,在buildarmeabi-v7alib 目錄下會(huì)有 opencv 靜態(tài)庫(kù)。
6、如果要編譯arm64-v8a 的,將腳本中的 armeabi-v7a 全部改成 arm64-v8a。
7、因?yàn)槟承┮蕾囂幚砗芾щy,容易導(dǎo)致編譯失敗,所以我添加了 這些指令,是取消編譯構(gòu)建這些模塊,如果題主需要編譯這些模塊的話,就需要自己解決依賴問(wèn)題。
C語(yǔ)言能干什么?
我做了六年c,感覺(jué)這方面的需求還是很大,
第一,嵌入式設(shè)備:幾乎所有的硬件設(shè)備都離不開(kāi)c,手機(jī),android設(shè)備是linux內(nèi)核,是純c,硬件都是要驅(qū)動(dòng)的,全是c,單片機(jī),數(shù)據(jù)機(jī)床。
第二,網(wǎng)絡(luò)設(shè)備:大到各種網(wǎng)絡(luò)設(shè)備,光纖設(shè)備,交換機(jī),防火墻,小到家里用的路由器,tcp/ip協(xié)議都是用c寫的,網(wǎng)絡(luò)還有多大發(fā)展空間,c就有多大需求。
第三,服務(wù)器:服務(wù)器端程序大部分都是c,精通nginx和squid可以把公司做上市,比如網(wǎng)宿科技。云服務(wù)也離不開(kāi)c??纯礃I(yè)界最強(qiáng)的云,亞馬遜,靠買書(shū)是做不到這么大的。還有比較熱門的大數(shù)據(jù),ipv6等等,涉及的業(yè)務(wù)非常廣。很多的工具都是c寫的,比如php,python.........
但是c不是這么簡(jiǎn)單,不是會(huì)語(yǔ)法就行,比如linux驅(qū)動(dòng),你要熟悉內(nèi)核構(gòu)架,還有有點(diǎn)硬件知識(shí)。c有很多的開(kāi)源代碼可以去看看。歡迎大家補(bǔ)充
androidstudio中怎么調(diào)用ffmpeg庫(kù)?
整體調(diào)用邏輯為:1 編譯完ffmpeg庫(kù)2 使用jni方式撰寫c代碼,其中需要包含相應(yīng)的ffmpeg的頭文件3 撰寫相應(yīng)的Android.mk文件,里面指定需要編譯的c代碼以及需要鏈接的動(dòng)態(tài)庫(kù)4 執(zhí)行ndk-build生成相應(yīng)的jni庫(kù)5 創(chuàng)建andorid java程序,代碼中l(wèi)oadLibrary相應(yīng)ffmpeg庫(kù)以及剛才生成的jni庫(kù)6 靜態(tài)方法聲明native函數(shù),這些函數(shù)在jni寫的c語(yǔ)言中都已經(jīng)實(shí)現(xiàn)過(guò)