Android-ffmpeg编译so文件
Android中如果需要用到ffmpeg做视频处理,那么最好的方法就是从头到尾亲自从编译到集成。踏入ffmpeg的第一步自然就是通过编译得到Android中可以用的so文件
环境准备
- centerOS7虚拟机,提供下载centerOS7的镜像文件 百度云迅雷种子地址
- jdk环境,可参考centerOS7: 搭建java环境
- android ndk 环境 ,本文是android-ndk-r13b,下载地址
- ffmpeg-3.2.12,下载地址
请大家按我提供的版本环境进行编译,不然会有很多坑要爬哦。本人就是一路爬坑,最后才编译成功0.0
首先
- 解压好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
复制代码
- 配置环境变量
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
- 进入ffmpeg创建一个临时目录
ffmpegtemp
[root@master ffmpeg-3.2.12]# mkdir ffmpegtemp
复制代码
- 配置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)'
复制代码
- 创建编译脚本
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
复制代码
脚本文件大家可以自行去研究,可以根据需要编译自己所需的东西
- 给
android_build.sh
赋予执行权限
[root@master ffmpeg-3.2.12]# chmod +x android_build.sh
复制代码
- 执行脚本
[root@master ffmpeg-3.2.12]# ./android_build.sh
复制代码
接下来等执行完毕后,就可以在ffmpeg根目录下发现一个android目录
里面有个arm
目录进去有一个include
和lib
include下面就是我们编译得到的ffmpeg的头文件lib下的带版本号的so文件就是我们编译ffmpeg得到的android可用的so文件 ,接下来我们把编译到的ffmpeg文件集成到Android中
Android-ffmpeg编译so文件相关推荐
- ffmpeg android 编译选项,技术共享|安卓系统的完美转身 Android FFmpeg 编译和使用
原标题:技术共享|安卓系统的完美转身 Android FFmpeg 编译和使用 2017年,智能手机修罗场,国产手机华为.OPPO.vivo.小米等纷纷出大招,跻身全球销量前10名单,华为推出荣耀旗舰 ...
- Xamarin For Android 打包编译APK文件详细图文教程
原文链接 本文用于介绍Visual Studio 2012中Xamarin Mono For Android 如何打包编译APK文件,从如何创建Android项目,到如何启动调试,都会逐个配图讲解. ...
- android反编译apk文件
android反编译apk文件 android运行的是.dex文件的二进制码,java运行的是.class文件的码,那么android是怎么将.java格式的文件转换为.dex的文件?------&g ...
- android ffmpeg编译so,Android FFmpeg学习(一),将FFmpeg编译成so文件
前言 搜索了一堆编译so文件的方法,一直遇到问题,最后终于搞好了. 再次非常感谢<使用Android Studio开发FFmpeg的正确姿势>一文对我的帮助,让我成功编译出了so. 编译环 ...
- android ffmpeg编译动态库,最简单的android studio调用ffmpeg动态库
准备工作: 1.编译好的ffmpeg动态库.so文件,以及ffmpeg的头文件: 2.android studio开发环境,包括NDK等可用环境: 步骤一: 新建一个android studio工程, ...
- Mac 平台 Android FFmpeg 编译与集成实践
文章目录 FFmpeg 是什么 为什么要学 FFmpeg 开发 FFmpeg 编译 1. 编译环境准备 2. FFmpeg 环境配置 3. 完整的脚本 4. FQA 编译小结 在Android Stu ...
- Android 重新编译资源文件
在开发过程中,尤其是Framework相关开发时,有时候需要重新编译资源文件.编译顺序和注意事项如下: 1,资源文件位置:frameworks/base/core/res 2,编译后生成的文件:fra ...
- Android 重新编译资源文件(touch)
在编译Android的模块时会用mm快速编译,但如果只是修改一些资源图片后执行mmm,却没有编译到: No private recovery resources for TARGET_DEVICE g ...
- Android 反编译apk文件
需要的工具: apktool:将apk文件反编译成原始的目录文件 地址:http://code.google.com/p/android-apktool/downloads/list dex2jar: ...
- android prebuild第三方so库,Android NDK编译本地文件以及引用第三方so文件
在需要引入第三方的so文件的情况下,怎样使用NDK编译本地代码? 1.新建jni文件夹,将你要编译源码的文件以及需要引入的so文件复制到jni文件目录下 2.编写android.mk文件,首先将你的将 ...
最新文章
- python—函数进阶-迭代器
- system 函数被废除的替代方法
- 利用python爬虫(part17)--初识selenium
- 对KVC和KVO的理解
- 用beyond compare解决git不能同步项目重新下载项目然后就行对比解决冲突
- iOS 如果刷新TableViewCell上得数据是空的 添加尾部暂无数据提示
- 在jupyter编写代码列出HTML,Jupyter ~ 像写文章般的 Coding (附:同一个ipynb文件,执行多语言代码)...
- python语法(二)——截取字符串的方法详解
- 新美国安全中心报告:中国在量子技术中占据了重要优势
- oracle装一半报错要卸掉,OpenSUSE下oracle11gR2的安装卸载
- 如何对 Oracle 数据泵(expdp/impdp) 进行 debug
- 老板最讨厌的10种烂个性
- 擎标带你了解CMMI3与CMMI5的区别
- LaTeX tabular表格环境与命令
- 【智能家居】智能单火开关目前普遍存在的问题
- 叉乘点乘混合运算公式_运算定律和简便计算的说课稿
- C++ Qt自建网页浏览器
- mssql 计划怎每隔n秒_4个步骤,教你定制超科学的跑步计划
- 高性能日志:如何提升日志性能避免 IO 瓶颈?
- Linux:安装最新版本R + Rstudio成功使用最新R
热门文章
- 宁波大红鹰学院计算机毕设,网络文化对价值观的影响调查报告马克思主义基本原理概论》课程调查实践报告大学毕业设计.doc...
- Java数据结构和算法:HashMap的实现原理
- Java字符串格式化
- oracle服务端用sql查看连接到数据库的IP
- mysql设置常用——修改大小写、设置sql_mode不支持功能、
- java dayofweek_Java DayOfWeek getDisplayName()用法及代碼示例
- python sin_Python sin() 函数
- latex 1图加标题_学习|Latex排版
- 在显著性区域外画矩形框matlab,Matlab实验报告样板
- 线程安全的map_ThreadLocal | 线程本地存储