栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

ffmpeg系列之移植到安卓中调用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ffmpeg系列之移植到安卓中调用

文章目录

基础调用

1)编译安卓需要的so,请参考2)将so引入安卓中使用3)cpp中进行cmake配置4) 编写jni测试代码5) 配置gradle相关位置6)build运行即可

基础调用 1)编译安卓需要的so,请参考

编译ffmpeg的安卓版本

2)将so引入安卓中使用

在module的src/main/下创建cpp和jniLibs模块,jniLibs中存放so文件

3)cpp中进行cmake配置

将ffmpeg的头文件拷贝到src/main/cpp下

配置cmakelist

# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html

# Sets the minimum version of CMake required to build the native library.

cmake_minimum_required(VERSION 3.10.2)

# Declares and names the project.

project("ffmpeg")

#设置FFmpeg头文件的路径,共享库,include里面h文件调用其他h文件用到的
include_directories(
        include#因为和CMakeLists.txt在同一级,所以直接写include
)

add_library(ffmpeg
        SHARED
        ffmpeg_util.cpp)

find_library(
        log-lib
        log)

add_library(avcodec
        SHARED
        importED)
#给avcodec这个变量赋值
set_target_properties(avcodec
        PROPERTIES importED_LOCATION
        ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libavcodec.so)


add_library(avdevice
        SHARED
        importED)
set_target_properties(avdevice
        PROPERTIES importED_LOCATION
        ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libavdevice.so)

add_library(avformat
        SHARED
        importED)
set_target_properties(avformat
        PROPERTIES importED_LOCATION
        ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libavformat.so)

add_library(avutil
        SHARED
        importED)
set_target_properties(avutil
        PROPERTIES importED_LOCATION
        ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libavutil.so)


add_library(swresample
        SHARED
        importED)
set_target_properties(swresample
        PROPERTIES importED_LOCATION
        ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libswresample.so)

add_library(swscale
        SHARED
        importED)
set_target_properties(swscale
        PROPERTIES importED_LOCATION
        ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libswscale.so)

add_library(avfilter
        SHARED
        importED)
set_target_properties(avfilter
        PROPERTIES importED_LOCATION
        ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libavfilter.so)



target_link_libraries(ffmpeg
        ${log-lib}
        avcodec swresample avutil)
4) 编写jni测试代码
#include 

#include 
#include 


#ifdef __cplusplus
extern "C"
{
#endif

#include "libavcodec/avcodec.h"

#ifdef __cplusplus
}
#endif

extern "C" JNIEXPORT jstring JNICALL
Java_com_cd_lib_ffmpeg_FfmpegUtil_stringFromJNI(
        JNIEnv* env,
        jobject ) {
    return env->NewStringUTF(avcodec_configuration());
}

根据jni规则编码java

public class FfmpegUtil {

    // Used to load the 'ffmpeg' library on application startup.
    static {
        System.loadLibrary("ffmpeg");
    }

    
    public static native String stringFromJNI();
}

5) 配置gradle相关位置

android {
    ...

    defaultConfig {
       ...
        ndk {
            abiFilters  'armeabi-v7a', 'arm64-v8a'
        }
    }
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

    externalNativeBuild {
        cmake {
            path file('src/main/cpp/CMakeLists.txt')
            version '3.10.2'
        }
    }
    ...
}

6)build运行即可
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/703609.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号