ffmpeg android 中文文档,Android 中使用FFMPEG

Android开发中引入FFMPEG需要先打包FFMPEG动态链接库(即.so文件),不清楚怎么编译获取的同学参看:

Android FFMPEG Mac编译教程

接下来说说Android Studio引入FFMPEG动态链接库的详细过程;

1、在Android Studio中新建Android工程

File -> New -> NewProject...

df9401e6fba5

Create New Project.png

选择Native C++

df9401e6fba5

Choose Native C++.png

选择Android版本,根据自己的开发需求选择即可,这里我选择的默认API26,也就是Android 8.0(Oreo)奥利奥。

Next

df9401e6fba5

命名FFMPEGTest.png

Next

df9401e6fba5

Choose C++ Standard.png

选择C++的版本,可供选择的版本有C++ 11/14/17。这里不清楚各个版本特性的同学直接选择Toolchain Default即可。

点击Finish

到此,我们支持C++的Android Project已经创建成功。第一次创建C++依赖工程的同学会下载一段时间的依赖库,下载时间视网络情况,一般3~10分钟左右。

工程如图:

df9401e6fba5

截屏2020-11-06 下午6.41.48.png

2、Android Project Support C++(Android C++工程)

我们把左上角的目录结构切换到Project,如图:

df9401e6fba5

切换目录结构.png

打开工程目录结构,我们会看到:

df9401e6fba5

截屏2020-11-06 下午6.47.07.png

相比于传统的Android Project而言,Android C++多出了两个文件:

1、.cxx文件夹

2、cpp文件夹

.cxx文件夹中存放的就是我们c编译过程中的临时问价

cpp文件夹中CMakeLists.txt文件中需要我们写入工程中依赖的所有C++库文件。native-lib.cpp中为C++和JAVA互相调用的中继方法。比如创建工程时系统自动生成的example方法:

df9401e6fba5

example.png

在java或者kotlin中调用:

df9401e6fba5

image.png

3、FFMPEG库引入Android Project

1.首先,将我们在Android FFMPEG Mac编译教程中编译出来的部分文件移入libs文件夹下。include文件夹全部拷入。在libs文件夹下新家armeabi文件夹,把libavcodec-57.so、libavdevice-57.so、libavfilter-6.so、libavformat-57.so、libavutil-55.so、libpostproc-54.so、libswresample-2、solibswscale-4.so拷贝到armeabi文件夹下,如图:

df9401e6fba5

动态链接库和头文件拷贝之后的文件结构.png

2.修改CMakeLists.txt文件

在CMakeLists.txt文件的

cmake_minimum_required(VERSION 3.10.2)

语句后面加入:

include_directories(libs/include)

set(DIR ../../../../libs)

project("ffmpegtest")

add_library(avcodec-57

SHARED

IMPORTED)

set_target_properties(avcodec-57

PROPERTIES IMPORTED_LOCATION

${DIR}/armeabi/libavcodec-57.so)

add_library(avdevice-57

SHARED

IMPORTED)

set_target_properties(avdevice-57

PROPERTIES IMPORTED_LOCATION

${DIR}/armeabi/libavdevice-57.so)

add_library(avformat-57

SHARED

IMPORTED)

set_target_properties(avformat-57

PROPERTIES IMPORTED_LOCATION

${DIR}/armeabi/libavformat-57.so)

add_library(avutil-55

SHARED

IMPORTED)

set_target_properties(avutil-55

PROPERTIES IMPORTED_LOCATION

${DIR}/armeabi/libavutil-55.so)

add_library(postproc-54

SHARED

IMPORTED)

set_target_properties(postproc-54

PROPERTIES IMPORTED_LOCATION

${DIR}/armeabi/libpostproc-54.so)

add_library(swresample-2

SHARED

IMPORTED)

set_target_properties(swresample-2

PROPERTIES IMPORTED_LOCATION

${DIR}/armeabi/libswresample-2.so)

add_library(swscale-4

SHARED

IMPORTED)

set_target_properties(swscale-4

PROPERTIES IMPORTED_LOCATION

${DIR}/armeabi/libswscale-4.so)

add_library(avfilter-6

SHARED

IMPORTED)

set_target_properties(avfilter-6

PROPERTIES IMPORTED_LOCATION

${DIR}/armeabi/libavfilter-6.so)

注意:add_library()和set_target_properties()中所引入动态链接库版本号要和/lisb/armeabi文件夹下对应文件的版本一致.例如:libavcodec-57.so如果你的版本号是xx,就改为libavcodec-xx.so即可。

然后把文件结尾的:

target_link_libraries()

语句修改为:

target_link_libraries( # Specifies the target library.

native-lib

avfilter-6

avcodec-57

avdevice-57

avformat-57

avutil-55

postproc-54

swresample-2

swscale-4

# Links the target library to the log library

# included in the NDK.

${log-lib})

保存关闭。

3、修改app build.gradle文件

在defaultConfig中加入:

defaultConfig{

/...

externalNativeBuild {

cmake {

cppFlags "-frtti -fexceptions"

}

}

ndk {

//选择要添加的对应cpu类型的.so库。

abiFilters 'armeabi-v7a'

// 还可以添加 'x86', 'x86_64', 'mips', 'mips64'

}

}

4、编译

步骤3中所有的文件修改完成之后,一次执行如下操作:

1.Build -> Clean Project

2.Build -> Refresh Linked C++ Projects

3.Build -> Rebuild Project

如图:

df9401e6fba5

截屏2020-11-06 下午7.12.20.png

最后连上Android手机,跑一跑,搞定。

备注

如果在整个过程中出现异常情况,排查错误的顺序为:

1、检查CMakeLists.txt文件代码是否正确添加;

2、检查CMakeLists.txt中的代码对应的.so库版本是否一致;

3、检查CMakeLists.txt中target_link_libraries()是否没有遗漏;

4、检查build.gradle文件中配置是否正确;

5、尝试在Project Structure中更换NDK版本。

总之,集体错误具体分析把。实在搞不清楚了留个言,虽然我也不一定啥时候肯得到,哈哈哈。

后续会陆续更新FFMPEG具体功能的使用教程。

祝各位同僚一切顺利!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值