Android集成FFmpeg

一、编译生成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'
        }
    }
}

 


然后运行,只要不报错,说明环境配置已经完成

楼主也是第一次用这个,参考了网上很多大神的方法,最后总结出来这个,如果有什么问题可以评论大家一起交流!

posted @ 2017-09-12 15:46  红嘴唇小丑  阅读(1809)  评论(0编辑  收藏  举报