Android编译FFmpeg类库
来源:互联网 发布:手机群呼软件 编辑:程序博客网 时间:2024/06/06 00:40
FFmpeg使用第一步,编译FFmpeg源码 –> .so 库。
编译环境
- Mac OS X Capitan 10.11.3
- NDK-r10e (64-bit)
- FFmpeg 3.0
准备工作
- 下载安装NDK 下载地址
- 下载FFmpeg源码 下载地址
编译过程
修改configure文件
下载FFmpeg源代码之后,首先需要对源代码中的configure文件进行修改。由于编译出来的动态库文件名的版本号在.so之后(例如“libavcodec.so.5.100.1”),而android平台不能识别这样文件名,所以需要修改这种文件名。
找到 ffmpeg-3.0/configure 文件,找到以下几行:
1234
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)'
替换为下面内容:
1234
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'SLIB_INSTALL_LINKS='$(SLIBNAME)'
编写脚本文件
modified:2016-05-16
新建脚本文件 ffmpeg-3.0/build_android.sh,保存下面脚本。
新建临时文件夹 ffmpeg-3.0/ffmpegtemp,将脚本中的 TMPDIR 改为自己的临时文件夹。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
export TMPDIR=/Users/hubin/Desktop/ffmpeg-3.0/ffmpegtemp #这句很重要,不然会报错 unable to create temporary file in# NDK的路径,根据自己的安装位置进行设置NDK=~/Applications/android-sdk/ndk-bundle# 编译针对的平台,可以根据自己的需求进行设置# 这里选择最低支持android-14, arm架构,生成的so库是放在# libs/armeabi文件夹下的,若针对x86架构,要选择arch-x86PLATFORM=$NDK/platforms/android-14/arch-arm# 工具链的路径,根据编译的平台不同而不同# arm-linux-androideabi-4.9与上面设置的PLATFORM对应,4.9为工具的版本号,# 根据自己安装的NDK版本来确定,一般使用最新的版本TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64function build_one{./configure \--prefix=$PREFIX \--target-os=linux \--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \--arch=arm \--sysroot=$PLATFORM \--extra-cflags="-I$PLATFORM/usr/include" \--cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \--nm=$TOOLCHAIN/bin/arm-linux-androideabi-nm \--enable-shared \--enable-runtime-cpudetect \--enable-gpl \--enable-small \--enable-cross-compile \--disable-debug \--disable-static \--disable-doc \--disable-asm \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-ffserver \--disable-postproc \--disable-avdevice \--disable-symver \--disable-stripping \$ADDITIONAL_CONFIGURE_FLAGsed -i '' 's/HAVE_LRINT 0/HAVE_LRINT 1/g' config.hsed -i '' 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' config.hsed -i '' 's/HAVE_ROUND 0/HAVE_ROUND 1/g' config.hsed -i '' 's/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g' config.hsed -i '' 's/HAVE_TRUNC 0/HAVE_TRUNC 1/g' config.hsed -i '' 's/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g' config.hsed -i '' 's/HAVE_CBRT 0/HAVE_CBRT 1/g' config.hsed -i '' 's/HAVE_RINT 0/HAVE_RINT 1/g' config.hmake cleanmake -j4make install}# arm v7vfpCPU=armv7-aOPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "PREFIX=./android/$CPU-vfpADDITIONAL_CONFIGURE_FLAG=build_one# CPU=armv# PREFIX=$(pwd)/android/$CPU# ADDI_CFLAGS="-marm"# build_one#arm v6#CPU=armv6#OPTIMIZE_CFLAGS="-marm -march=$CPU"#PREFIX=./android/$CPU#ADDITIONAL_CONFIGURE_FLAG=#build_one#arm v7vfpv3# CPU=armv7-a# OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU "# PREFIX=./android/$CPU# ADDITIONAL_CONFIGURE_FLAG=# build_one#arm v7n#CPU=armv7-a#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm -march=$CPU -mtune=cortex-a8"#PREFIX=./android/$CPU#ADDITIONAL_CONFIGURE_FLAG=--enable-neon#build_one#arm v6+vfp#CPU=armv6#OPTIMIZE_CFLAGS="-DCMP_HAVE_VFP -mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU"#PREFIX=./android/${CPU}_vfp#ADDITIONAL_CONFIGURE_FLAG=#build_one
执行build_android.sh:
1
$ chmod +x build_android.sh
1
$ ./build_android.sh
我编译时有一个警告:
1
****/arm-linux-androideabi-pkg-config not found, library detection may fail.
不影响编译,如果你知道原因,分享一下吧 3Q~
等待几分钟,不出意外的话会报错的。这时就是讨论时间了。。。
如果编译成功了。。。如下图
在 ffmpeg-3.0/android 目录下就能找到编译好的文件:
这里是 可直接编译的源码 可以免去自己配置的麻烦。
这里有 编译好的SO文件 需要的可以直接下载使用。
写这篇博客时我也是刚开始要接触FFmpeg,编译的过程也是从Google和stackoverflow上找的,难免写得不够细致详尽,如有遗漏、错误请告知。
参考资料
- FFmpeg移植Android平台
- 最简单的基于FFmpeg的移动端例子(雷霄骅)
- FFmpeg的Android平台移植
- 编译可供Android使用的FFmpeg库
阅读全文
0 0
- Android编译FFmpeg类库
- android ndk 编译 ffmpeg
- ffmpeg 编译至android
- Android NDK编译ffmpeg
- ffmpeg android编译
- 编译FFMPEG Android版本
- android编译ffmpeg+x264
- 编译ffmpeg到android
- android ffmpeg 编译
- android编译ffmpeg+x264
- ffmpeg android编译
- android ffmpeg 编译
- ffmpeg Android编译
- android ffmpeg 编译
- android 编译FFmpeg
- android编译ffmpeg+x264
- Android ffmpeg编译
- ffmpeg android编译脚本
- android接口回调
- HDOJ1176免费馅饼--动态规划探骊(一)
- 内部类:非静态内部类,静态内部类,局部内部类,匿名内部类详解
- Codeforces 19D-Points
- 接口测试 使用 Jmeter 做 Web 接口测试
- Android编译FFmpeg类库
- struts2框架
- pandas数据汇总记录
- TP实现找父亲节点的树
- Python 实现RSA SHA-1签名
- navcat连接数据库Mysql使用密码问题
- 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99
- Java 虚拟机垃圾回收机制
- ubuntu14.04安装CUDA8.0