Android Studio 3.5.3配置ffmpeg的2种方法

首先要有ffmpeg编译后的文件,这个网上很多,如果懒得编译,直接从我后面的demo中的lib文件夹里去拿就行了。

第一种
新建一个ndk项目:

在这里插入图片描述

打开后的目录结构是这样的:

然后将armeabi-v7a文件夹复制到libs下,armeabi-v7a文件下有.a文件:

然后在app的build.gradle文件设置成这样:

在这里插入图片描述

把include文件夹(demo里有)复制到cpp文件夹下,里面包含了.h头文件:

紧接着将CMakeLists.txt替换成如下内容:

cmake_minimum_required(VERSION 3.4.1)

add_library(
        native-lib
        SHARED
        native-lib.cpp)

include_directories(include)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/../../../libs/${CMAKE_ANDROID_ARCH_ABI}")

find_library(
        log-lib
        log)

target_link_libraries(
        native-lib
        avformat avcodec avfilter avutil swresample swscale
        ${log-lib})

其中的include_directories可以设置头文件目录

CMAKE_CXX_FLAGS表示全局变量, CMAKE_SOURCE_DIR表示当前这个文件(CMakeLists.txt)的所在路径

CMAKE_SOURCE_DIR}/…/…/…/libs/${CMAKE_ANDROID_ARCH_ABI}:表示.a文件所在的路径

${CMAKE_ANDROID_ARCH_ABI}是系统定义的变量,他的含义就是之前在build.gradle中定义的:abiFilters ‘armeabi-v7a’

到这里就完成了,在native-lib.cpp中写个测试案例:

#include <jni.h>
#include <string>

extern "C" {
#include "include/libavutil/avutil.h"
}

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(av_version_info());
}

运行就能在手机上看见版本号了:

第二种:

其实几乎没什么变化,变化就是在src/main/下新建一个名为jniLibs的文件夹:

然后同样将之前的armeabi-v7a文件夹(内含.a文件)复制进去。

build.gradle的配置不变,与第一种的一样。

同样的将include文件复制到cpp文件夹下:

CMakeLists.txt的编写只有set稍微有些不同,但是很好理解,还是要将路径指向.a文件所在处:

cmake_minimum_required(VERSION 3.4.1)

include_directories(include)
#主要还是要把-L后面的路径设置成.a文件所在的路径
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/../jniLibs/${CMAKE_ANDROID_ARCH_ABI}")
add_library(
        native-lib
        SHARED
        native-lib.cpp)


find_library(
        log-lib
        log)

target_link_libraries(
        native-lib
        avformat avcodec avfilter avutil swresample swscale
        ${log-lib})

native-lib.cpp:

#include <jni.h>
#include <string>


extern "C" {
#include "include/libavutil/avutil.h"
}

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(av_version_info());
}

demo地址:https://github.com/lyx19970504/Android-Studio-ffmpeg

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哒哒呵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值