编译Android下可用的全平台FFmpeg(包含libx264与libfdk-aac)
来源:互联网 发布:怎么启动mysql 编辑:程序博客网 时间:2024/05/16 12:17
请尊重原创,转载请注明出处:http://blog.csdn.net/mabeijianxi/article/details/74544879
源码或工具版本:
- ndk :r14
- FFmpeg 版本:3.2.5
- libfdk-aac 版本:0.1.5
一、源码准备:
这里假设你已经拥有了ndk环境,没有的可以先配置,可以参考Android下玩JNI的新老三种姿势。
- FFmpeg源码下载地址:http://ffmpeg.org/download.html。
- libx264下载地址:http://www.videolan.org/developers/x264.html
- libfdk-aac下载地址:http://www.linuxfromscratch.org/blfs/view/7.7/multimedia/fdk-aac.html
二、编写全平台脚本:
脚本地址:https://github.com/mabeijianxi/FFmpeg4Android,脚本目录结构如下:
- ffmpeg-3.2.5
- jianxi_ffmpeg_build_all.sh
- jianxi_ffmpeg_arm64_v8a_build.sh
- jianxi_ffmpeg_arm_build.sh
- jianxi_ffmpeg_arm_v7a_build.sh
- jianxi_ffmpeg_x86_64_build.sh
- jianxi_ffmpeg_x86_build.sh
- jianxi_ffmpeg_build_all_more.sh
- jianxi_ffmpeg_arm64_v8a_build_more.sh
- jianxi_ffmpeg_arm_build_more.sh
- jianxi_ffmpeg_arm_v7a_build_more.sh
- jianxi_ffmpeg_x86_64_build_more.sh
- jianxi_ffmpeg_x86_build_more.sh
- fdk-aac-0.1.5
- fdk_aac_arm64_v8a_build.sh
- fdk_aac_arm_build.sh
- fdk_aac_build_all.sh
- fdk_aac_mips_build.sh
- fdk_aac_x86_64_build.sh
- fdk_aac_x86_build.sh
- libx264
- x264_arm64_v8a_build.sh
- x264_arm_build.sh
- x264_build_all.sh
- x264_mips_build.sh
- x264_x86_64_build.sh
- x264_x86_build.sh
jianxi_ffmpeg_build_all.sh 可生成精简版的全平台 FFmpeg 动态库,产物目录为:/ffmpeg-3.2.5/android/,jianxi_ffmpeg_build_all_more.sh 将生成增强版的全平台 FFmpeg 动态库,产物地址为:/ffmpeg-3.2.5/android_more。
三、修改脚本和源码
1、如果你用我源码:
你如果直接下载我修改好的 FFmpeg 源码与 libfdk-aac 源码那么你需要做的工作将会少一些,你找到上面所列目录结构里的脚本,修改每个脚本里面 "NDK" 变量所指向的地址为你本机地址,其次如果你不是 mac 系统而是 Linux 系统,那么你还需要把里面包含 darwin-x86_64 的字样修改为 linux-x86_64。
2、如果重新下载官方源码:
这样你需要做的工作为稍微多一些。
- 首先你下载好了 FFmpeg、libx264、libfdk-aac 然后解压且按照上面 二 中我列的目录结构排放这个三个库的源码。
- 把脚本按照对应按照目录结构放入相应文件夹。
- 修改每个脚本里面 "NDK" 变量所指向地址为你本机地址,其次如果你不是 mac 系统而是 Linux 系统,那么你还需要把里面包含 darwin-x86_64 的字样修改为 linux-x86_64。
- 对 FFmpeg 源代码中的configure文件进行修改。由于编译出来的动态库文件名的版本号在.so之后(例如“libavcodec.so.5.100.1”),而android平台不能识别这样文件名,所以需要修改这种文件名。
找到 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)'
- 对 libfdk-aac 进行修改
进入 在 libfdk-aac 目录下找到 m4 目录并打开里面的 libtool.m4 文件:
全局搜索 so.1,替换为 so
全局搜索 $versuffix ,替换为空字符,也就是删除它
全局搜索 $major ,,替换为空字符,也就是删除它
编译
打开终端, cd 进入你的 ffmpeg 目录,新建一个 ffmpegtemp 目录,也就是执行 mkdir ffmpegtemp 即可。
然后如果你需要编译全架构,执行:
./jianxi_ffmpeg_build_all.sh 或 ./jianxi_ffmpeg_build_all_more.sh
如果你只编译某个平台执行响应脚本即可。
收集产物
精简版的 FFmpeg 的 动态库目录在 ffmpeg-3.2.5/android 下,增强版的 FFmpeg 的 动态库目录在 ffmpeg-3.2.5/android_more 下。
温馨提示
由于我编写脚本的时候是根据自己的目录和电脑配置来的,比如 libx264 、fdk-aac-0.1.5 等目录在脚本中写死的,再比如编译的时候我用来 make -j16 ,这表示有16个线程并发编译,我电脑编译全架构时发热也超级厉害,你可以根据自己配置跳转这个数值。
我 FFmpeg 的编译选项中开启了 neon与 yasm ,这都是一些优化配置,如果你编译的时候发现它们妨碍了你,可以将其关闭。
如果你想跟着我一起测试编译好的 FFmpeg 在 Android 上的表现可以锁定 编译Android下可执行命令的FFmpeg 这个频道
最后附上所有源码与脚本地址:https://github.com/mabeijianxi/FFmpeg4Android。
- 编译Android下可用的全平台FFmpeg(包含libx264与libfdk-aac)
- 编译Android下可用的FFmpeg(包含libx264与libfdk-aac)
- iOS编译libx264+libfdk-aac+FFmpeg
- 在Android下编译ffmpeg+x264+libfdk-aac的常见问题和解决方法
- 编译libfdk-aac 库,使用根目录下的android.mk直接包含所有子目录下的android.mk文件
- 【编译脚本】macos下libfdk-aac三个ios平台最新的编译脚本i386 arm7 arm7s
- ubuntu 14.10下安装带有libfdk-aac的ffmpeg
- iOS ffmpeg + libfdk-aac
- Android编译供ffmpeg使用的libx264
- ios ffmpeg(libfdk-aac) aac encode
- android ffmpeg libx264编译记录
- 编译Android下可用的FFmpeg+x264
- FFmpeg学习—android 利用ffmpeg 集成libfdk-aac 录制aac 音频文件
- FFmpeg学习—android 利用ffmpeg 集成libfdk-aac 录制aac 音频文件
- <android编译ffmpeg+x264+faac> <Android/NDK环境下FFmpeg及AAC,MP3,X264的编译>
- linux下编译支持librtmp、libx264、libfaac的ffmpeg
- linux 编译安装ffmpeg 与libx264的方法
- 使用NDK交叉编译ffmpeg+libx264找不到libx264的解决方法
- 查看一个iOS库文件所支持的框架
- java_NIO和IO_简单的理解分享
- 简单动画--css
- linux服务相关
- React.js内容的两种写法
- 编译Android下可用的全平台FFmpeg(包含libx264与libfdk-aac)
- Python中函数的使用
- 23day NSURLConnection
- 2017-7-6 14:40(在家)
- Android四大组件之活动
- 详解Android动画之Tween Animation
- poj-1837
- spring配置文件xml文件开头总是有个红叉,是找不到schema文件
- 51nod2006 飞行员配对(二分图最大匹配)匈牙利算法