服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android Studio引入FFmpeg的方法

Android Studio引入FFmpeg的方法

2022-11-30 15:20张雨明 Android

这篇文章主要介绍了Android Studio引入FFmpeg的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

新建C++工程

新建

两个externalNativeBuild

一个sourceSets(指定so路径)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
android {
 compileSdkVersion 29
 buildToolsVersion "29.0.3"
 defaultConfig {
 ...
 externalNativeBuild {
  cmake {
  cppFlags "-std=c++11 -frtti -fexceptions"
  abiFilters 'armeabi-v7a'
  }
 }
 sourceSets {
  main {
  jniLibs.srcDirs = ['src/main/jniLibs']
  }
 }
 }
 ...
 externalNativeBuild {
 cmake {
  path "src/main/cpp/CMakeLists.txt"
  version "3.10.2"
 }
 }
}

复制so和include文件

Android Studio引入FFmpeg的方法

编写CMakeLists.txt

以下是默认值

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cmake_minimum_required(VERSION 3.4.1)
 
add_library(native-lib
 SHARED
 native-lib.cpp
 #nativ-lib2.cpp 如果有其他cpp文件可以一并打包到native-lib中)
 
#查找系统的log库,并赋值给变量log-lib
find_library(
 log-lib
 log)
 
#将上面log-lib变量里的库连接到native-lib中
target_link_libraries(
 native-lib
 ${log-lib})

CMakeLists中添加FFmpeg头文件路径

?
1
2
3
4
#设置FFmpeg头文件的路径
include_directories(
 include#因为和CMakeLists.txt在同一级,所以直接写include
)

CMakeLists中添加libavcodec.so

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#定义一个变量avcodec
add_library(
 avcodec
 SHARED
 IMPORTED
)
 
#给avcodec这个变量赋值
set_target_properties(avcodec PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libavcodec.so)
 
#将avcodec混合编译到native-lib中
target_link_libraries(
 native-lib
 ${log-lib}
 avcodec
)

CMakeLists中添加全部的so

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
cmake_minimum_required(VERSION 3.4.1)
 
#设置FFmpeg头文件的路径
include_directories(
 include#因为和CMakeLists.txt在同一级,所以直接写include
)
 
add_library(native-lib
 SHARED
 native-lib.cpp)
 
find_library(
 log-lib
 log)
 
#1.定义一个变量avcodec
add_library(
 avcodec
 SHARED
 IMPORTED
)
#给avcodec这个变量赋值
set_target_properties(avcodec PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libavcodec-57.so)
 
#2.
add_library(
 avdevice
 SHARED
 IMPORTED
)
set_target_properties(avdevice PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libavdevice-57.so)
 
#3.
add_library(
 avfilter
 SHARED
 IMPORTED
)
set_target_properties(avfilter PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libavfilter-6.so)
 
#4.
add_library(
 avformat
 SHARED
 IMPORTED
)
set_target_properties(avformat PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libavformat-57.so)
 
#5.
add_library(
 avutil
 SHARED
 IMPORTED
)
set_target_properties(avutil PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libavutil-55.so)
 
#6.
add_library(
 postproc
 SHARED
 IMPORTED
)
set_target_properties(postproc PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libpostproc-54.so)
 
#7.
add_library(
 swresample
 SHARED
 IMPORTED
)
set_target_properties(swresample PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libswresample-2.so)
 
#8.
add_library(
 swscale
 SHARED
 IMPORTED
)
set_target_properties(swscale PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../../main/jniLibs/${ANDROID_ABI}/libswscale-4.so)
 
#将avcodec混合编译到native-lib中
target_link_libraries(
 native-lib
 ${log-lib}
 avcodec#1
 avdevice#2
 avfilter#3
 avformat#4
 avutil#5
 postproc#6
 swresample#7
 swscale#8
)

编写测试函数

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <jni.h>
#include <string>
 
extern "C" {
#include "libavcodec/avcodec.h"
}
 
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myffmpegcmd_MainActivity_stringFromJNI(
 JNIEnv *env,
 jobject /* this */) {
 std::string hello = "Hello from C++";
 return env->NewStringUTF(avcodec_configuration());
}

Android Studio引入FFmpeg的方法

总结

到此这篇关于Android Studio引入FFmpeg的文章就介绍到这了,更多相关Android Studio引入FFmpeg内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/yu540135101/article/details/104914545

延伸 · 阅读

精彩推荐
  • AndroidAndroid Application级别自定义Toast

    Android Application级别自定义Toast

    这篇文章主要为大家详细介绍了Android Application级别自定义Toast,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    络雨凉9742022-07-27
  • AndroidAndroid布局之LinearLayout线性布局

    Android布局之LinearLayout线性布局

    LinearLayout是线性布局控件:要么横向排布,要么竖向排布,下面通过本篇文章给大家介绍Android布局之LinearLayout线性布局,涉及到android linearlayout 布局相关知...

    会飞的一只狼11962021-04-28
  • AndroidAndroid带进度的圆形进度条

    Android带进度的圆形进度条

    这篇文章主要为大家详细介绍了Android带进度的圆形进度条,实现自定义View,自定义属性,感兴趣的小伙伴们可以参考一下...

    xiaanming11542021-05-26
  • AndroidAndroid编程实现基于BitMap获得图片像素数据的方法

    Android编程实现基于BitMap获得图片像素数据的方法

    这篇文章主要介绍了Android编程实现基于BitMap获得图片像素数据的方法,对比分析了两种获取图片像素的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    fengyee_zju4292021-04-16
  • AndroidAndroid 后台运行白名单实现保活

    Android 后台运行白名单实现保活

    这篇文章主要介绍了Android 后台运行白名单实现保活,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们...

    NanBox5222022-11-13
  • AndroidAndroid PullToRefreshLayout下拉刷新控件的终结者

    Android PullToRefreshLayout下拉刷新控件的终结者

    这篇文章主要介绍了Android自定义控件实战中下拉刷新控件终结者PullToRefreshLayout的实现方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣...

    陈靖_12002021-06-26
  • Android轻松实现Android指南针功能

    轻松实现Android指南针功能

    这篇文章主要介绍了轻松实现Android指南针功能的几个关键步骤,想要实现指南针功能的朋友不要错过...

    徐刘根10542021-04-20
  • Androidandroid View 绘制完成监听的实现方法

    android View 绘制完成监听的实现方法

    今天小编就为大家分享一篇android View 绘制完成监听的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    lang_play8192022-08-01