android 中ffmpeg集成

ffmpeg集成到android项目中,需要编译ffmpeg为so文件使用

1、Ubuntu系统准备

下载WMware虚拟机,下载ubuntu desktop系统,进行安装;

按照操作步骤或者其中的提示进行设置即可

或者整个系统使用U 盘安装(Rufus 软件制作)

安装sudo apt-get install时出错 Unable to locate package,解决方案

编辑/etc/apt/sources.list文件, 在文件最前面添加以下条目(操作前请做好相应备份):

deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse

deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse

deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse

deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse

deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse

deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse

deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse

deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse

2、ffmpeg编译准备

jdk安装,ndk安装

jdk安装,ndk安装难点:配置环境变量;在~/.bashrc文件末尾添加下面配置;

export JAVA_HOME=/opt/jdk1.8.0_181 // 替换为自己的jdk目录

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export NDK_HOME=/opt/android-ndk-r20 // 替换为自己的ndk目录

export PATH=$NDK_HOME:${JAVA_HOME}/bin:$PATH //这一步,用来设置寻找bin文件路径的,没有就不能直接执行命令

加入后一定一定要记得应用 source ~/.bashrc

jdk可以自动安装:

sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update

sudo apt-get install oracle-java8-installer

3、使用脚本进行编译

首先:修改其中configure文件

SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'

LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'

SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'

SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'

替换为

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'

LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'

SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'

SLIB_INSTALL_LINKS='$(SLIBNAME)'

然后:执行脚本编译;脚本

脚本中需要修改ndk的路径

脚本中:--prefix=编译结果路径

脚本更多解析:脚本先是对configure进行设置并生成一些编译文件;make 才是编译

查看config的参数说明 ./configure -h

注意:ndk使用14版本的,ffmpeg最新版编译仍存在问题;configure一定要带参数先执行,再编译

常见错误

常见错误2

4、应用so文件

新建项目:过程如我的另一篇博客

首先:拷贝 ffmpeg的相关cpu架构的so文件和头文件到项目


android 中ffmpeg集成_第1张图片
copy内容

然后:也是最重要的,进行编译链接这些库;cmakelist.txt文件配置如下

add_library:添加库(库名去掉lib头和.so尾部,库类型,编译文件/导入类别);这里说明添加的libavcodec-58.so库是动态导入的

set_target_properties:设置库属性;这里设置了导入库libavcodec-58.so的路径

ANDROID_ABI:cpu架构名字,编译时常量

ADD_LIB:自己定义常量:set(ADD_LIB E:/android-workspace/vedioplayer/app/src/main/jniLibs)


android 中ffmpeg集成_第2张图片
添加库

最后:最后在打包最终的动态库时,需要链接这些库

include_directories:设置了添加第三库的头文件,这样在工程C/C++文件中,才可以使用

最终打包so库为libnative-lib.so,其中依赖了下面其他的so库

android 中ffmpeg集成_第3张图片
链接

java层动态加载:System.loadLibrary("native-lib");就可以了

你可能感兴趣的:(android 中ffmpeg集成)