Android FFMPEGMultiMdia

一、FFmpeg编译和环境的搭建

2019-06-30  本文已影响46人  石器时代小古董

学习自网易课堂

一、使用 NDK 编译 FFmpeg

1.默认环境编译

下载 FFmpeg 源码 目前4.0.2是比较稳定的版本

执行 .configure 文件

./configure --disable-x86asm

注意编译android版本还需要一些配置

--disable-shared \ 禁用动态库
--enable-static \ 使用静态库
--cross-prefix 交叉编译工具的路径
--target-os=android

二、AS 搭建 FFmpeg 环境

1.将编译好的库放到libs目录下

image.png

2.在工程的gradle目录下指定编译的平台

image.png

3.在 CmakeList 中添加 FFmpeg 的库

cmake_minimum_required(VERSION 3.4.1)
add_library(
        native-lib

        SHARED

        src/main/cpp/native-lib.cpp)

include_directories(src/main/cpp/include)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L$-L${CMAKE_SOURCE_DIR}/libs/armeabi-v7a")

find_library(
        log-lib

        log)

target_link_libraries( # Specifies the target library.
        native-lib
        # ffmpeg 库
        avcodec avfilter avformat avutil swresample swscale
        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})

4.测试是否成功
因为 FFmpeg 使用的都是 C 语言编写的,所以需要用 extern 关键词声明混合编译

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

/**
 * FFmpeg 都是用 C 语言来写的,使用extern来进行混合编译
 */
extern "C" {
#include <libavcodec/avcodec.h>
}


extern "C" JNIEXPORT jstring JNICALL
Java_com_baidu_crazyorange_ffmpeg_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string _ffmpeg_info = av_version_info();
    return env->NewStringUTF(_ffmpeg_info.c_str());
}

上一篇 下一篇

猜你喜欢

热点阅读