Android平台下的FFmpeg的学习之路------(二)环境搭建

此系列文章将记录我学习FFmpeg的过程。

要使用FFmpeg开发,首先要搭建好环境。所以这篇文章将带大家在AS搭建好NDK环境,在AS里面优雅的开发NDK,和如何使用FFmpeg。

下面先在AS搭建NDK环境,本人使用的是Android Studio 3.0 

首先打开AS,并创建一个新项目


创建完成后,AS3.0不知道是什么原因,总是出现这个错误


我百度了一下,解决方法是:

在项目的gradle.properties中加入下面那句代码
android.enableAapt2=false


这样就OK了,不报错了。

接着下载NDK



接下来配置一下NDK的常用命令,以后就能优雅的使用NDK开发了



然后配置一下和下面一样的配置


命令配置参数:
javah用于生成头文件
Program:$JDKPath$/bin/javah
Parameters: -encoding UTF-8 -d ../jni -jni $FileClass$
注意:这个命令我加上-encoding UTF-8指定编码,你可以改成你项目的编码。
Working directory: $SourcepathEntry$\..\java

最后点击OK,就这样配置好了一个javah命令


接着我们在按照前面的步骤,再配置有个javap命令,可用于查看签名

配置如下


命令配置参数:
javah用于生成头文件
Program:$JDKPath$/bin/javap
Parameters: -s $FileClass$
Working directory: $OutputPath$

然后点击OK,就这样配置好了javap命令


最后,全部选上,点击OK就配置完成了。

接着我们就开始接入FFmpeg进行开发了

首先,先在main目录下新建jni文件夹,然后在jni文件夹里面新建include文件夹,libs文件夹和Android.mk文件,然后在include文件夹里面新建ffmpeg文件夹(用来存放ffmpeg头文件),接着在libs文件夹里面新建armeabi文件夹(如果有mips版本和x86版本,就可以再新建mips和x86文件夹,然后把对应的so库存放到里面,当然,我们这里只有armeabi,所以就只新建armeabi文件夹)


然后找到编译好的文件,把对应的文件复制过去,把libffmpeg.so复制到armeabi文件夹,把include里面的文件复制到ffmpeg文件夹



复制完成后


接下来先编写java的native方法,代码如下


package com.jamingx.ffmpegtest;

/**
 * Created by Administrator on jamingx 2018/1/18 16:13
 */

public class FFmpegTest {
    public native static String getFFmpegCodecInfo();
}


瞬间生成好头文件了,是不是很优雅


接下来在jni文件夹新建cpp文件。此时先新建cpp文件,就可以了,因为此时如果你写c++代码,是没有代码提示的,只有配置把cpp文件配置在Android.mk文件,然后把Android.mk文件配置在build.gradle文件才会有代码提示,所以,我们新建号cpp文件后就开始编写Android.mk文件的代码,代码如下:


LOCAL_PATH := $(call my-dir)

# FFmpeg 库
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg
LOCAL_SRC_FILES := $(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libffmpeg.so
include $(PREBUILT_SHARED_LIBRARY)

# C文件
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg_test
LOCAL_SRC_FILES := ffmpeg_test.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include/ffmpeg

LOCAL_LDLIBS := -llog -landroid
LOCAL_SHARED_LIBRARIES := ffmpeg
include $(BUILD_SHARED_LIBRARY)

接下来我们在jni文件夹创建Application.mk文件,代码如下:



APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_PLATFORM := android-15

再接着我们配置build.gradle文件

打开build.gradle文件,然后defaultConfig里面指定so版本,添加以下代码:

ndk {
    abiFilters 'armeabi'
}


接着把Android.mk配置到build.gradle文件,做如下操作


点击ok后,build.gradle文件就会增加以下代码


此时,就可以编写c++代码了,此时已经有代码提示了。


接着我们编写c++代码,代码如下:


#include "com_jamingx_ffmpegtest_FFmpegTest.h"

extern "C" {
#include "libavcodec/avcodec.h"
}

JNIEXPORT jstring JNICALL Java_com_jamingx_ffmpegtest_FFmpegTest_getFFmpegCodecInfo
        (JNIEnv *env, jclass jcls){
    return env->NewStringUTF(avcodec_configuration());
}
最后完善FFmpegTest.java的代码



static {
        System.loadLibrary("ffmpeg");
        System.loadLibrary("ffmpeg_test");
    }
然后再完善MainActivity.java,和activity_main.xml的代码




这样,项目就完成了,我们运行一下,看一下运行效果


至此,环境搭建完成了。



猜你喜欢

转载自blog.csdn.net/Jamingx666/article/details/79098061