FFmpeg實戰(zhàn)--項目的集成

之前寫了FFmpeg的編譯過程冕香,那么編譯之后,就是用來實際的開發(fā)了后豫,開發(fā)之前悉尾,首先要把FFmpeg的lib和include集成到我們的項目。這一篇主要介紹如何集成到Android項目挫酿。

1构眯、新建Android工程

這個就不用說了吧......

2、創(chuàng)建JNI Folder

不知道怎么創(chuàng)建的我的另外一篇文章Android JNI之HelloWorld ,這里我們修改一下路徑:

QQ2016091.png

我這里的路徑為:app/jnicode/jni

3早龟、在jincode下新建一個prebuilt文件夾惫霸,把編譯出來的文件拷貝進來:
屏幕快照 2016-09-14 16.14.28.png

如上圖所示猫缭,我這里說明一下:

  • prebuilt :存放FFmpeg的頭文件。
  • jni:存放的是自己的C/C++代碼
  • arm32:32位處理器的libs
  • arm64 : 64位處理器的libs
  • autobuild.sh : 自動編譯的腳本
  • autojavah.sh : 自動把Java文件轉(zhuǎn)換為頭文件的腳本
4壹店、編寫自己的mk文件:

我們這里以32位架構(gòu)處理器來說明猜丹,大家都知道,要使用mk文件編譯一個文件硅卢,需要放置在jni文件夾下(不知道這樣表述是否正確射窒,目前接觸到的都是這樣的),所以在arm32下新建一個jni目錄将塑,還是上個圖吧脉顿,比照著圖片來說,更詳細一些点寥。

屏幕快照 2016-09-14 16.48.47.png

ps:不知道為什么截的圖越小弊予,圖片就被放的很大,反倒是截的圖片大了顯示的很小开财,好郁悶汉柒。。责鳍。碾褂。。历葛。

  • libs :放置ffmpeg的so文件
  • Android.mk
  • Application.mk

與jni平級的兩個目錄是編譯的時候自動生成的正塌。還有兩個mk文件,就不用我解釋了吧恤溶。

這里主要看一下Android.mk文件里面的內(nèi)容

LOCAL_PATH:= $(call my-dir) #指定當前目錄

PRE_BUILD_PATH:= $(LOCAL_PATH)/../../prebuilt #指定FFmpeg的頭文件目錄

MY_SRC_PATH:=$(LOCAL_PATH)/../../jni #指定自己的C代碼路徑
#************************libavcodec********************************/
include $(CLEAR_VARS)
LOCAL_MODULE:= libavcodec
LOCAL_SRC_FILES:= libs/libavcodec-57.so
LOCAL_EXPORT_C_INCLUDES := $(PRE_BUILD_PATH)/libffmpeg/libavcodec
include $(PREBUILT_SHARED_LIBRARY)

 #************************libavformat********************************/
include $(CLEAR_VARS)
LOCAL_MODULE:= libavformat
LOCAL_SRC_FILES:= libs/libavformat-57.so
LOCAL_EXPORT_C_INCLUDES := $(PRE_BUILD_PATH)/libffmpeg/libavformat
include $(PREBUILT_SHARED_LIBRARY)

 #************************libswscale********************************/
include $(CLEAR_VARS)
LOCAL_MODULE:= libswscale
LOCAL_SRC_FILES:= libs/libswscale-4.so
LOCAL_EXPORT_C_INCLUDES := $(PRE_BUILD_PATH)/libffmpeg/libswscale
include $(PREBUILT_SHARED_LIBRARY)

 #************************libavutil********************************/
include $(CLEAR_VARS)
LOCAL_MODULE:= libavutil
LOCAL_SRC_FILES:= libs/libavutil-55.so
LOCAL_EXPORT_C_INCLUDES := $(PRE_BUILD_PATH)/libffmpeg/libavutil
include $(PREBUILT_SHARED_LIBRARY)

 #************************libavfilter********************************/
include $(CLEAR_VARS)
LOCAL_MODULE:= libavfilter
LOCAL_SRC_FILES:= libs/libavfilter-6.so
LOCAL_EXPORT_C_INCLUDES := $(PRE_BUILD_PATH)/libffmpeg/libavfilter
include $(PREBUILT_SHARED_LIBRARY)

#************************libavfilter********************************/
include $(CLEAR_VARS)
LOCAL_MODULE:= libpostproc
LOCAL_SRC_FILES:= libs/libpostproc-54.so
LOCAL_EXPORT_C_INCLUDES := $(PRE_BUILD_PATH)/libffmpeg/libpostproc
include $(PREBUILT_SHARED_LIBRARY)

 #************************libswresample********************************/
include $(CLEAR_VARS)
LOCAL_MODULE:= libswresample
LOCAL_SRC_FILES:= libs/libswresample-2.so
LOCAL_EXPORT_C_INCLUDES := $(PRE_BUILD_PATH)/libffmpeg/libswresample
include $(PREBUILT_SHARED_LIBRARY)

#************************libx264********************************/

include $(CLEAR_VARS)
LOCAL_MODULE:= libx264
LOCAL_SRC_FILES:= libs/libx264.a
LOCAL_EXPORT_C_INCLUDES := $(PRE_BUILD_PATH)/libffmpeg/libx264
include $(PREBUILT_STATIC_LIBRARY)


include $(CLEAR_VARS)
LOCAL_MODULE := playerCore  #指定自己的so文件名稱

#需要編譯的自己的C文件
LOCAL_SRC_FILES:=  $(MY_SRC_PATH)/org_eson_ffmpeg_libs_PlayerCore.cpp \

LOCAL_LDLIBS += -llog -ljnigraphics -lz -landroid -lOpenSLES -g

#引入FFmpeg,這個如果不添加乓诽,編譯時會報錯
LOCAL_SHARED_LIBRARIES :=  libavcodec libavformat libswscale libavutil libavfilter libswresample

include $(BUILD_SHARED_LIBRARY)

其實,這里的libx264是可以不用要的咒程,我這里也添加上了鸠天。可以自行忽略帐姻。至于Application.mk 的內(nèi)容稠集,這里就貼出來了。

5饥瓷、修改FFmpeg的頭文件

這里先說一下為什么要修改
1剥纷、作為一個Java程序員,習慣用代碼的自動提示呢铆,如果不修改晦鞋,在寫的時候,不能自動提示,感覺好郁悶悠垛,也可以說是自己的技術(shù)還很渣吼砂,嚴重依賴代碼的提示。(畢竟自動提示寫代碼很快鼎文,但還是需要改改,這里記一下以后再寫代碼的時候能不用就不用因俐,對自己提高有幫助)
2拇惋、編譯64位時會報錯

解決方法:
1、修改頭文件的引用路徑(以libavcodec/avcodec.h為例):

#include "libavutil/samplefmt.h"
#include "libavutil/attributes.h"
#include "libavutil/avutil.h"
#include "libavutil/buffer.h"
#include "libavutil/cpu.h"
#include "libavutil/channel_layout.h"
#include "libavutil/dict.h"
#include "libavutil/frame.h"
#include "libavutil/log.h"
#include "libavutil/pixfmt.h"
#include "libavutil/rational.h"

改為:

#include "../libavutil/samplefmt.h"
#include "../libavutil/attributes.h"
#include "../libavutil/avutil.h"
#include "../libavutil/buffer.h"
#include "../libavutil/cpu.h"
#include "../libavutil/channel_layout.h"
#include "../libavutil/dict.h"
#include "../libavutil/frame.h"
#include "../libavutil/log.h"
#include "../libavutil/pixfmt.h"
#include "../libavutil/rational.h"

以自己的路徑為準抹剩,我這里只是參考撑帖。
2、在編譯64位時libutils/common.h會報錯澳眷,如果 common.h 報錯
在最上面添加以下代碼

#ifndef   UINT64_C
#define   UINT64_C(value)__CONCAT(value,ULL)
#endif
總結(jié)

FFmpeg的編譯和集成到這里就結(jié)束了胡嘿,后續(xù)有可能更新具體的實現(xiàn)某些功能,有時間在更新吧钳踊。

疑問

關(guān)于同時編譯出64位和32位架構(gòu)的so庫時衷敌,感覺現(xiàn)在模式比較麻煩,不知道還能不能優(yōu)化拓瞪,希望有大神看到指點一下缴罗。感謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末祭埂,一起剝皮案震驚了整個濱河市面氓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蛆橡,老刑警劉巖舌界,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異泰演,居然都是意外死亡呻拌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門睦焕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柏锄,“玉大人,你說我怎么就攤上這事复亏≈和蓿” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵缔御,是天一觀的道長抬闷。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么笤成? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任评架,我火速辦了婚禮,結(jié)果婚禮上炕泳,老公的妹妹穿的比我還像新娘纵诞。我一直安慰自己,他們只是感情好培遵,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布浙芙。 她就那樣靜靜地躺著,像睡著了一般籽腕。 火紅的嫁衣襯著肌膚如雪嗡呼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天皇耗,我揣著相機與錄音南窗,去河邊找鬼。 笑死郎楼,一個胖子當著我的面吹牛万伤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呜袁,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼壕翩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了傅寡?” 一聲冷哼從身側(cè)響起放妈,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荐操,沒想到半個月后芜抒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡托启,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年宅倒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屯耸。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡拐迁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疗绣,到底是詐尸還是另有隱情线召,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布多矮,位于F島的核電站缓淹,受9級特大地震影響哈打,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜讯壶,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一料仗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伏蚊,春花似錦立轧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至颜阐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吓肋,已是汗流浹背凳怨。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留是鬼,地道東北人肤舞。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像均蜜,于是被迫代替她去往敵國和親李剖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

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