FFmpeg:建立支援FFmpeg的AS專案
一.新建Android Studio專案
注意點:
1.在“Create Android Project”欄目時,須勾選“Include C++ support” 複選框;
2.在“Customize C++ Support 欄目”時,C++ Standard 選擇下拉列表中的“C++11”。
二.在AS專案中配置支援FFmpeg
注意點:
1.新增FFmpeg依賴庫。包括生成的標頭檔案和.so檔案。
1.1) 將編譯FFmpeg生成的include目錄拷貝到專案的app目錄下。
1.2) 將編譯FFmpeg生成的lib目錄拷貝到專案的libs目錄下。
PS:這裡需要區分不同的CPU平臺,如果FFmpeg生成的庫是針對armeabi-v7a的,則放到libs下的armeabi-v7a目錄,針對x86的,則放到x86目錄下。
2.配置FFmpeg庫的環境變數。主要用於告訴CMake FFmpeg標頭檔案的路徑,庫檔案的路徑,以及編譯連結的內容。
2.1) 宣告標頭檔案及用到的庫檔案路徑。開啟app目錄下的 CMakeLists.txt ,在原有內容基礎上新增下列程式碼:
#新增標頭檔案路徑 include_directories(include) #設定FFmpeg庫所在路徑 set(FF ${CMAKE_CURRENT_SOURCE_DIR}/libs/${ANDROID_ABI}) add_library(avcodec SHARED IMPORTED) set_target_properties(avcodec PROPERTIES IMPORTED_LOCATION ${FF}/libavcodec.so)
include_directories(include) 用於宣告標頭檔案的路徑,我們這裡是在include目錄下。
add_library 則用於宣告庫檔案的路徑,這裡的 add_library 不僅可用於新增原始碼型別的庫(如.cpp檔案),也可以新增編譯好的so庫(我們這裡使用的是libavcodec.so這個庫)。這裡的 avcodec
2.2) 連結指定的so庫。找到CMakeLists.txt中的 target_link_libraries 項,在原有的 native-lib 後新增上面用的庫名: avcodec
這段程式碼是讓CMake能夠連結指定的so庫,否則即使包含標頭檔案,在編譯時也會報函式undefined的錯誤。(將所有用到的庫全部連結到一個庫當中,這樣做的好處是在java中只需要引入一個native-lib庫就行了)
3.宣告專案庫檔案路徑
開啟app目錄下的build.gradle檔案,在defalutConfig大括號下新增下列程式碼:
externalNativeBuild { cmake { cppFlags "-std=c++11" } ndk { abiFilters "armeabi-v7a" } } sourceSets { main { jniLibs.srcDirs=['libs'] } }
這裡的 abiFilters 用於告訴編譯器我們只加載armv7a的版本, jniLibs.srcDirs 則指定我們的庫檔案是放在libs目錄下。
4.呼叫函式測試FFmpeg是否可以正常工作
開啟cpp目錄下的 native-lib.cpp 檔案中,在檔案頂部新增下列程式碼:
extern "C" { #include <libavcodec/avcodec.h> }
修改stringFromJNI()函式
編譯執行,如果程式顯示下面型別的內容,則說明FFmpeg已經配置並載入成功了。