美文网首页音视频学习
android 中ffmpeg集成

android 中ffmpeg集成

作者: 众少成多积小致巨 | 来源:发表于2019-07-06 14:55 被阅读0次

    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文件和头文件到项目

    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)

    添加库

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

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

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

    链接

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

    相关文章

      网友评论

        本文标题:android 中ffmpeg集成

        本文链接:https://www.haomeiwen.com/subject/rzuphctx.html