一、編譯生成FFmpeg的頭文件和so庫 如果不知道怎麼做可以看這裡:http://blog.csdn.net/qsw15923/article/details/77943515 二、新建項目 在新建時勾選下方的include C++support,然後一路下一步即可 創建完項目後如果之前沒有配置N ...
一、編譯生成FFmpeg的頭文件和so庫
如果不知道怎麼做可以看這裡:http://blog.csdn.net/qsw15923/article/details/77943515
二、新建項目
在新建時勾選下方的include C++support,然後一路下一步即可
創建完項目後如果之前沒有配置NDK環境和CMAKE環境則會報錯,則按下述方法配置:
NDK配置:
在項目右鍵-->Open Module Settings-->SDK Location
該界面最下方就是NDK路徑的配置,修改為你自己的NDK路徑即可
CMAKE配置:
File --> Settings --> Appearance & Behavior --> System Settings --> Android SDK --> SDK Tools
選中圖中紅框標記的選項,下載即可
三、項目配置
1、文件複製
1.將第一步中得到的include文件夾複製到app/src/main/cpp/中
2.在app/src/main/中新建文件夾jniLibs/armeabi/並將第一步得到的so庫複製到該文件夾下
複製完的結構如圖:
2、CMakeLists.txt文件修改
將CMakeLists.txt 修改為如下內容:
cmake_minimum_required(VERSION 3.4.1) set(lib_src_DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}) include_directories( ${CMAKE_SOURCE_DIR}/src/main/cpp/include ) add_library(avcodec-57_lib SHARED IMPORTED) set_target_properties(avcodec-57_lib PROPERTIES IMPORTED_LOCATION ${lib_src_DIR}/libavcodec-57.so) add_library(avformat-57_lib SHARED IMPORTED) set_target_properties(avformat-57_lib PROPERTIES IMPORTED_LOCATION ${lib_src_DIR}/libavformat-57.so) add_library(avutil-55_lib SHARED IMPORTED) set_target_properties(avutil-55_lib PROPERTIES IMPORTED_LOCATION ${lib_src_DIR}/libavutil-55.so) add_library(swresample-2_lib SHARED IMPORTED) set_target_properties(swresample-2_lib PROPERTIES IMPORTED_LOCATION ${lib_src_DIR}/libswresample-2.so) add_library(swscale-4_lib SHARED IMPORTED) set_target_properties(swscale-4_lib PROPERTIES IMPORTED_LOCATION ${lib_src_DIR}/libswscale-4.so) # build application's shared lib add_library(native-lib SHARED ${CMAKE_SOURCE_DIR}/src/main/cpp/native-lib.cpp) target_link_libraries(native-lib log android avcodec-57_lib avformat-57_lib avutil-55_lib swresample-2_lib swscale-4_lib)
3、native-lib.cpp修改
將預設生成的native-lib.cpp修改為以下內容:
註:函數名要按照jni中的命名規則修改為你自己的包名
#include <jni.h> #include <string> extern "C" { #include "libavcodec/avcodec.h" } extern "C" JNIEXPORT jstring JNICALL Java_com_example_y_demoffmpeg_MainActivity_stringFromJNI(JNIEnv *env, jobject /* this */) { char info[10000] = { 0 }; sprintf(info, "%s\n", avcodec_configuration()); return env->NewStringUTF(info); }
4、build.gradle修改
在app的build.gradle中添加以下內容:
android { defaultConfig { ndk { abiFilters 'armeabi' } } }
然後運行,只要不報錯,說明環境配置已經完成
樓主也是第一次用這個,參考了網上很多大神的方法,最後總結出來這個,如果有什麼問題可以評論大家一起交流!