Android中如果需要用到ffmpeg做视频处理,那么最好的方法就是从头到尾亲自从编译到集成。踏入ffmpeg的第一步自然就是通过编译得到Android中可以用的so文件

环境准备

  1. centerOS7虚拟机,提供下载centerOS7的镜像文件 百度云迅雷种子地址
  2. jdk环境,可参考centerOS7: 搭建java环境
  3. android ndk 环境 ,本文是android-ndk-r13b,下载地址
  4. ffmpeg-3.2.12,下载地址

请大家按我提供的版本环境进行编译,不然会有很多坑要爬哦。本人就是一路爬坑,最后才编译成功0.0

首先

  1. 解压好ffmpeg,ndk的压缩包
tar -zxvf ffmpeg-3.2.12.tar.gz //解压ffmpeg
yum install -y unzip zip //安装zip压缩解压客户端
unzip android-ndk-r13b-linux-x86_64.zip
复制代码
  1. 配置环境变量
vi /etc/profile
ANDROID_NDK=/home/mmcc/android-ndk-r13b
JAVA_HOME=/home/mmcc/jdk1.8
PATH=$JAVA_HOME/bin:$ANDROID_NDK/bin:$PATH:.
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export JAVA_HOME
export PATH
export CLASSPATHsource /etc/profile #生效环境变量
复制代码

配置ffmpeg

  1. 进入ffmpeg创建一个临时目录ffmpegtemp
[root@master ffmpeg-3.2.12]# mkdir ffmpegtemp
复制代码
  1. 配置ffmpeg目录下的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)'
复制代码
  1. 创建编译脚本vi android_build.sh
#!/bin/bash
export TMPDIR=/home/mmcc/ffmpeg-3.2.12/ffmpegtemp  #此处替换
NDK=/home/mmcc/android-ndk-r13b   #此处替换
SYSROOT=$NDK/platforms/android-14/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPU=arm
PREFIX=./android/$CPU
ADDI_CFLAGS="-marm"
function build_one
{./configure \--prefix=$PREFIX \--enable-shared \--disable-static \--disable-doc \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-ffserver \--disable-doc \--disable-symver \--enable-small \--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \--target-os=linux \--arch=arm \--enable-cross-compile \--sysroot=$SYSROOT \--extra-cflags="-Os -fpic $ADDI_CFLAGS" \--extra-ldflags="$ADDI_LDFLAGS" \$ADDITIONAL_CONFIGURE_FLAGmake cleanmake -j4make install
}
build_one
复制代码

脚本文件大家可以自行去研究,可以根据需要编译自己所需的东西

  1. android_build.sh赋予执行权限
[root@master ffmpeg-3.2.12]# chmod +x android_build.sh
复制代码
  1. 执行脚本
[root@master ffmpeg-3.2.12]# ./android_build.sh
复制代码

接下来等执行完毕后,就可以在ffmpeg根目录下发现一个android目录

里面有个arm目录进去有一个includelib

include下面就是我们编译得到的ffmpeg的头文件lib下的带版本号的so文件就是我们编译ffmpeg得到的android可用的so文件 ,接下来我们把编译到的ffmpeg文件集成到Android中

Android-ffmpeg编译so文件相关推荐

  1. ffmpeg android 编译选项,技术共享|安卓系统的完美转身 Android FFmpeg 编译和使用

    原标题:技术共享|安卓系统的完美转身 Android FFmpeg 编译和使用 2017年,智能手机修罗场,国产手机华为.OPPO.vivo.小米等纷纷出大招,跻身全球销量前10名单,华为推出荣耀旗舰 ...

  2. Xamarin For Android 打包编译APK文件详细图文教程

    原文链接 本文用于介绍Visual Studio 2012中Xamarin Mono For Android 如何打包编译APK文件,从如何创建Android项目,到如何启动调试,都会逐个配图讲解. ...

  3. android反编译apk文件

    android反编译apk文件 android运行的是.dex文件的二进制码,java运行的是.class文件的码,那么android是怎么将.java格式的文件转换为.dex的文件?------&g ...

  4. android ffmpeg编译so,Android FFmpeg学习(一),将FFmpeg编译成so文件

    前言 搜索了一堆编译so文件的方法,一直遇到问题,最后终于搞好了. 再次非常感谢<使用Android Studio开发FFmpeg的正确姿势>一文对我的帮助,让我成功编译出了so. 编译环 ...

  5. android ffmpeg编译动态库,最简单的android studio调用ffmpeg动态库

    准备工作: 1.编译好的ffmpeg动态库.so文件,以及ffmpeg的头文件: 2.android studio开发环境,包括NDK等可用环境: 步骤一: 新建一个android studio工程, ...

  6. Mac 平台 Android FFmpeg 编译与集成实践

    文章目录 FFmpeg 是什么 为什么要学 FFmpeg 开发 FFmpeg 编译 1. 编译环境准备 2. FFmpeg 环境配置 3. 完整的脚本 4. FQA 编译小结 在Android Stu ...

  7. Android 重新编译资源文件

    在开发过程中,尤其是Framework相关开发时,有时候需要重新编译资源文件.编译顺序和注意事项如下: 1,资源文件位置:frameworks/base/core/res 2,编译后生成的文件:fra ...

  8. Android 重新编译资源文件(touch)

    在编译Android的模块时会用mm快速编译,但如果只是修改一些资源图片后执行mmm,却没有编译到: No private recovery resources for TARGET_DEVICE g ...

  9. Android 反编译apk文件

    需要的工具: apktool:将apk文件反编译成原始的目录文件 地址:http://code.google.com/p/android-apktool/downloads/list dex2jar: ...

  10. android prebuild第三方so库,Android NDK编译本地文件以及引用第三方so文件

    在需要引入第三方的so文件的情况下,怎样使用NDK编译本地代码? 1.新建jni文件夹,将你要编译源码的文件以及需要引入的so文件复制到jni文件目录下 2.编写android.mk文件,首先将你的将 ...

最新文章

  1. python—函数进阶-迭代器
  2. system 函数被废除的替代方法
  3. 利用python爬虫(part17)--初识selenium
  4. 对KVC和KVO的理解
  5. 用beyond compare解决git不能同步项目重新下载项目然后就行对比解决冲突
  6. iOS 如果刷新TableViewCell上得数据是空的 添加尾部暂无数据提示
  7. 在jupyter编写代码列出HTML,Jupyter ~ 像写文章般的 Coding (附:同一个ipynb文件,执行多语言代码)...
  8. python语法(二)——截取字符串的方法详解
  9. 新美国安全中心报告:中国在量子技术中占据了重要优势
  10. oracle装一半报错要卸掉,OpenSUSE下oracle11gR2的安装卸载
  11. 如何对 Oracle 数据泵(expdp/impdp) 进行 debug
  12. 老板最讨厌的10种烂个性
  13. 擎标带你了解CMMI3与CMMI5的区别
  14. LaTeX tabular表格环境与命令
  15. 【智能家居】智能单火开关目前普遍存在的问题
  16. 叉乘点乘混合运算公式_运算定律和简便计算的说课稿
  17. C++ Qt自建网页浏览器
  18. mssql 计划怎每隔n秒_4个步骤,教你定制超科学的跑步计划
  19. 高性能日志:如何提升日志性能避免 IO 瓶颈?
  20. Linux:安装最新版本R + Rstudio成功使用最新R

热门文章

  1. 宁波大红鹰学院计算机毕设,网络文化对价值观的影响调查报告马克思主义基本原理概论》课程调查实践报告大学毕业设计.doc...
  2. Java数据结构和算法:HashMap的实现原理
  3. Java字符串格式化
  4. oracle服务端用sql查看连接到数据库的IP
  5. mysql设置常用——修改大小写、设置sql_mode不支持功能、
  6. java dayofweek_Java DayOfWeek getDisplayName()用法及代碼示例
  7. python sin_Python sin() 函数
  8. latex 1图加标题_学习|Latex排版
  9. 在显著性区域外画矩形框matlab,Matlab实验报告样板
  10. 线程安全的map_ThreadLocal | 线程本地存储