(二)Android FFmpeg集成加使用命令

今天給大家說說如果把編譯好的ffmpeg集成在項目中靡狞,編譯是對于Android開發(fā)是一大難題。但現(xiàn)在我們迎刃而解了隔嫡,現(xiàn)在我就開始第二小難題了,咱們先看一個最簡單的案例甸怕,把視頻轉(zhuǎn)為gif

a.gif

下來我就就開始操作,先把你打包好的文件部署到Android stuido項目中腮恩,下面是我們需要的文件梢杭,如果不知道怎么來的文件,請看上一篇文章就知道了
image.png

下來需要創(chuàng)建一個支持c++的項目
下面我們看看目錄結(jié)構(gòu)下面是操作秸滴,記得刪除externalNativeBuild里面make的version版本哪一行武契,要不然后面操作會有問題,他會控制你的cmake版本
out.gif

下來在app/src/main目錄下面創(chuàng)建jniLibs文件來放置編譯好的so文件(如圖下)荡含,下面我們只需要把現(xiàn)在的文件考入進去看下面的操作圖即可


input.gif

這么我們第一步才算完成咒唆,下面我們就要把一些ffmpeg文件根目錄下里面的源碼文件拷貝出來放在項目里面,我們需要的文件有

cmdutils.c 释液、 cmdutils.h 全释、cmdutils_common_opts.h 、config.h 误债、ffmpeg.c 浸船、 ffmpeg.h 妄迁、ffmpeg_filter.c 、ffmpeg_opt.c

下面是拷貝后的結(jié)構(gòu)圖


image.png

此外我需要創(chuàng)建ffmpeg_cmd.c文件來進行c層和java層的通信放在ffmpeg目錄中(刪除native-lib.cpp文件看個人需求如果習(xí)慣寫c++的可以用cpp文件)(如下圖)


image.png

在看CMakeLists文件前我們應(yīng)該提前配置好build.gradle的文件(如下圖)


image.png

下面我們來一起看看CMakeLists.txt文件,先把CMakeLists里面的注釋刪除

cmake_minimum_required(VERSION 3.4.1)

add_library( # Sets the name of the library.
        ffmpeg-cmd

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        ffmpeg_cmd.c
        ffmpeg/cmdutils.c
        ffmpeg/ffmpeg_filter.c
        ffmpeg/ffmpeg_opt.c
        ffmpeg/ffmpeg.c)

find_library(log-lib
        log)

#獲取上級目錄
get_filename_component(PARENT_DIR ${CMAKE_SOURCE_DIR} PATH)

add_library(ffmpeg-single
        SHARED
        IMPORTED)

set_target_properties(ffmpeg-single PROPERTIES IMPORTED_LOCATION ${PARENT_DIR}/jniLibs/${ANDROID_ABI}/libffmpeg.so)

#頭文件
include_directories(include .)

target_link_libraries(ffmpeg-cmd ffmpeg-single ${log-lib})

大概簡述一下意思
cmake_minimum_required是cmake版本號設(shè)定
add_library設(shè)置庫的名稱里面把填入的點c文件編譯生成動態(tài)so名為ffmpeg-cmd
find_library()這個的作用是用來讓我們加一些編譯本地NDK庫的時候所用的到一些依賴庫
set_target_properties()導(dǎo)入第三方so庫
target_link_libraries() 這個的目的是用來關(guān)聯(lián)我們本地的庫跟第三方的庫.這里就是把ffmpeg-cmd庫李命、log-lib庫和ffmpeg-single庫關(guān)聯(lián)起來
下面給大家看一下編譯好的apk分析圖一下就明白了


image.png

既然CmakeLists已經(jīng)整理好了登淘,下來我們只需要Make Project一下,然后ide會提示一些錯誤项戴,然后會提示你有些引入文件沒有找到然后去對應(yīng)的文件夾去找相應(yīng)的文件并拷貝進項目中即可(如圖下)


input.gif

注:有些引入頭文件沒有找到可以直接刪除形帮,不會影響后面的操作

下面我來處理一些代碼上面的細節(jié),我們先把ffmpeg.c文件打開周叮,滑動最下面到最后一個方法前辩撑,把方法名改為cmd_exec(如下圖)


image.png

然后再ffmpeg.h文件末尾添加函數(shù)申明: int run(int argc, char **argv);(如下圖)


image.png

下來我們需要修改cmdutils.c 和 cmdutils.h這兩個文件,下面我們來看看需要修改什么仿耽,先從cmdutils.c 文件開始修改方法exit_program合冀,把void改為int,然后方法里面只返回return ret即可(如下圖)
image.png

下來修改cmdutils.h文件中exit_program方法项贺,返回值修改為int君躺,然后把后面的av_noreturn刪掉(如下圖)


image.png

下來我們看看ffmpeg_cmd.c文件怎么處理,我們需要先創(chuàng)建方法來調(diào)用cmd_exec方法开缎,來執(zhí)行ffmpeg命令棕叫,獲取傳入字符串?dāng)?shù)組的長度,進行遍歷組合然后再執(zhí)行cmd_exec方法
image.png

下面我們來看看如果調(diào)用寫的好的c/c++層代碼奕删,俺泣,我們需要創(chuàng)建一個類名為FFmpegCmd的類
image.png

下面我們只需要在MainActivity調(diào)用即可,但在這個之前我們需要在AndroidManifest文件中配置相應(yīng)的讀寫文件權(quán)限
image.png

下來我們直接可以看MainActivity代碼完残,然后執(zhí)行即可成功(要把對應(yīng)的文件放入手機中)
image.png

項目地址

后續(xù)會寫關(guān)于
1伏钠、執(zhí)行過程中進度如何實現(xiàn)
2、如何多次調(diào)用命令
3谨设、如何取消正在執(zhí)行過程中的任務(wù)
上面三個功能的文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熟掂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扎拣,更是在濱河造成了極大的恐慌赴肚,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件二蓝,死亡現(xiàn)場離奇詭異尊蚁,居然都是意外死亡,警方通過查閱死者的電腦和手機侣夷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門横朋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人百拓,你說我怎么就攤上這事琴锭∥酰” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵决帖,是天一觀的道長厕九。 經(jīng)常有香客問我,道長地回,這世上最難降的妖魔是什么扁远? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮刻像,結(jié)果婚禮上畅买,老公的妹妹穿的比我還像新娘。我一直安慰自己细睡,他們只是感情好谷羞,可當(dāng)我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著溜徙,像睡著了一般湃缎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蠢壹,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天嗓违,我揣著相機與錄音,去河邊找鬼图贸。 笑死蹂季,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的求妹。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼佳窑,長吁一口氣:“原來是場噩夢啊……” “哼制恍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起神凑,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤净神,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后溉委,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鹃唯,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年瓣喊,在試婚紗的時候發(fā)現(xiàn)自己被綠了坡慌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡藻三,死狀恐怖洪橘,靈堂內(nèi)的尸體忽然破棺而出跪者,到底是詐尸還是另有隱情,我是刑警寧澤熄求,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布渣玲,位于F島的核電站,受9級特大地震影響弟晚,放射性物質(zhì)發(fā)生泄漏忘衍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一卿城、第九天 我趴在偏房一處隱蔽的房頂上張望枚钓。 院中可真熱鬧,春花似錦藻雪、人聲如沸秘噪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽指煎。三九已至,卻和暖如春便斥,著一層夾襖步出監(jiān)牢的瞬間至壤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工枢纠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留像街,地道東北人。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓晋渺,卻偏偏與公主長得像镰绎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子木西,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容