FFmpeg—專案匯入FFmpeg動態庫(二)
AndroidStudio匯入FFmpeg動態庫和一般的NDK開發匯入動態庫一樣。首先我們準備好動態庫。
那麼FFmpeg的動態庫哪裡來呢?
可以看看我寫的部落格:NDK開發——Linux編譯FFmpeg這篇部落格會告訴你怎麼編譯動態庫。
當然也有編譯好的現成的so庫,百度網盤:連結:https://pan.baidu.com/s/1AjOJYbh6dfWgOOFzIxM9Kw 密碼:ikr8
1、新建NDK專案
新建NDK專案和建一般的專案差不多,有兩個點需要注意:
-
新建專案的時候將
include C++ support
勾選上。 -
新增c++的異常處理支援(可選)
一路點到finish,然後就會構建NDK專案了,第一次構建NDK專案時間有點長,這個時候你可以掏出手機打一把王者農藥。
2、匯入動態庫
匯入動態庫的方式有兩種哦,我這裡只介紹一種。
- 第一種將動態庫放到jniLibs資料夾中。(不介紹)
- 將動態庫匯入到libs中
記住這個資料夾名稱:armeabi-v7a 這個是必須這樣命名的,因為我編譯的就是arm cpu架構的動態庫,用armeabi命名也不行哦,會報如下錯誤:
ABIs [armeabi] are not supported for platform. Supported ABIs are [armeabi-v7a, arm64-v8a, x86, x86_64].
然後需要在app下的build.gradle下新增如下配置:
externalNativeBuild {
cmake {
cppFlags "-frtti -fexceptions"
abiFilters 'armeabi-v7a'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
3、配置CMakeList.txt
將動態庫匯入之後,還需要配置好CMakeList.txt將動態庫連結進去。
cmake_minimum_required(VERSION 3.4.1)
add_library( native-lib
SHARED
src/main/cpp/native-lib.cpp )
find_library( log-lib
log )
# 宣告一個DIR的變數獲取libs的路徑
set(DIR ../../../../libs)
# 引入標頭檔案
include_directories(libs/include)
# 引入所有的so動態庫
add_library(avcodec-56
SHARED
IMPORTED)
set_target_properties(avcodec-56
PROPERTIES IMPORTED_LOCATION
${DIR}/armeabi-v7a/libavcodec-56.so)
add_library(avdevice-56
SHARED
IMPORTED)
set_target_properties(avdevice-56
PROPERTIES IMPORTED_LOCATION
${DIR}/armeabi-v7a/libavdevice-56.so)
add_library(avformat-56
SHARED
IMPORTED)
set_target_properties(avformat-56
PROPERTIES IMPORTED_LOCATION
${DIR}/armeabi-v7a/libavformat-56.so)
add_library(avutil-54
SHARED
IMPORTED)
set_target_properties(avutil-54
PROPERTIES IMPORTED_LOCATION
${DIR}/armeabi-v7a/libavutil-54.so)
add_library(postproc-53
SHARED
IMPORTED)
set_target_properties(postproc-53
PROPERTIES IMPORTED_LOCATION
${DIR}/armeabi-v7a/libpostproc-53.so)
add_library(swresample-1
SHARED
IMPORTED)
set_target_properties(swresample-1
PROPERTIES IMPORTED_LOCATION
${DIR}/armeabi-v7a/libswresample-1.so)
add_library(swscale-3
SHARED
IMPORTED)
set_target_properties(swscale-3
PROPERTIES IMPORTED_LOCATION
${DIR}/armeabi-v7a/libswscale-3.so)
add_library(avfilter-5
SHARED
IMPORTED)
set_target_properties(avfilter-5
PROPERTIES IMPORTED_LOCATION
${DIR}/armeabi-v7a/libavfilter-5.so)
# 連結動態庫
target_link_libraries( native-lib
avcodec-56
avdevice-56
avformat-56
avutil-54
postproc-53
swresample-1
swscale-3
avfilter-5
${log-lib} )
4、測試編譯是否能通過
在自動生成的MainActivity中載入這些動態庫,然後執行下,看看能不能跑起來吧。不過估計還沒到這一步,上面的幾步點一下Sync Now同步程式碼編譯不通過也是常有的事。
static {
System.loadLibrary("avcodec-56");
System.loadLibrary("avdevice-56");
System.loadLibrary("avfilter-5");
System.loadLibrary("avformat-56");
System.loadLibrary("avutil-54");
System.loadLibrary("postproc-53");
System.loadLibrary("swresample-1");
System.loadLibrary("swscale-3");
System.loadLibrary("native-lib");
}
如果編譯執行成功,就可以開始使用FFmpeg提供的api做一些事情啦。
5、需要了解的一些東西
如果要熟練的匯入動態庫到專案中,CMakeList.txt的語法需要了解,還有就是兩種不同的匯入平臺的so庫(比如這裡只匯入了arm下的so庫),匯入平臺庫的不同配置方式。
相關文章
- 怎麼在Android專案中匯入ffmpeg庫?Android
- 製作FFmpeg動態庫(make ffmpeg dynamic lib)
- FFmpeg開發筆記(四)FFmpeg的動態連結庫介紹筆記
- ffmpeg 匯出影片檔案中的音訊音訊
- ffmpeg學習window下使用Visual Studio建立cpp專案新增ffmpeg原始碼編譯好的依賴庫原始碼編譯
- IDEA如何匯入專案,包括從git倉庫(github)匯入專案IdeaGithub
- ffmpeg入門到實戰-ffmpeg是怎麼轉碼的?
- IDEA匯入專案筆記二Idea筆記
- FFmpeg開發筆記(八)Linux交叉編譯Android的FFmpeg庫筆記Linux編譯Android
- ffmpeg
- linux 入門(七)-ffmpeg使用Linux
- 二、FFmpeg的模組結構
- FFmpeg開發筆記(十七)Windows環境給FFmpeg整合字幕庫libass筆記Windows
- socket動態庫專案
- 安裝ffmpeg和crontab執行ffmpeg
- FFmpeg 使用
- 為.Net專案新增動態庫載入路徑
- FFmpeg編譯Android使用的so庫編譯Android
- Git專案匯入其他的git倉庫Git
- ffmpeg-入門介紹(筆記)筆記
- FFmpeg學習之一(FFmpeg原始碼編譯)原始碼編譯
- FFmpeg command line tool(Android中使用FFmpeg命令列)Android命令列
- Android-ffmpeg編譯so檔案Android編譯
- 一、靜態庫和動態庫,Makefile專案管理專案管理
- ffmpeg載圖
- ffmpeg Advanced options
- ffmpeg Preset files
- FFmpeg Filtering IntroductionFilter
- ffmpeg Filtergraph descriptionFilter
- ffmpeg+srs
- ffmpeg與nginxNginx
- FFMPEG安裝
- FFMPEG基本操作
- ffmpeg錄屏
- FFmpeg使用(一)
- java怎麼匯入專案?java已有專案如何匯入eclipse?JavaEclipse
- ffmpeg入門篇-濾鏡的基本使用
- 從fdk_aac編碼器到自動靜態編譯FFmpeg編譯