[TOC]
- 下载地址 http://ffmpeg.org/olddownload.html
我下载的是3.0.11版本. 备注: 别搞最新的 要最稳定的 免得编译不通过,掉坑里出不来.
注意 NDK版本和FFMPEG的版本 貌似必须对应上 如果对应不上报错
- 正确对应版本 NDK 14 FFMPEG 3.0 终于成功了
错误 我在这里卡了很久才明白
/bin/sh: ranlib/usr/local/lib/libavdevice.a: No such file or directory
make: *** [install-libavdevice-static] Error 127
我需要下r14的
官方文档
https://trac.ffmpeg.org/wiki/CompilationGuide
我是centos
https://trac.ffmpeg.org/wiki/CompilationGuide/Centos
https://blog.csdn.net/leixiaohua1020/article/details/47191283
- 下载源文件.
- 命令 wget http://www.ffmpeg.org/releases/ffmpeg-3.0.11.tar.gz
- 解压 tar -xzf ffmpeg-3.0.11.tar.gz
- 因为ffmpeg 里面很多可执行文件 所以必须给这个文件夹可执行权限 修改权限命令
[root@host ffmpeg]# chmod 777 -R ffmpeg-2.6.9
[root@host ffmpeg]# ll
total 9524
drwxrwxrwx 16 1000 1000 4096 May 2 2016 ffmpeg-3.0.11
-rw-r--r-- 1 root root 9744514 May 2 2016 ffmpeg-3.0.11.tar.gz
[root@host ffmpeg]#
接下来需要把ffmpeg里面的八大模块全部编译成so.怎么编译?
通过Makefile.就想之前的make语法那样,当然肯定不是自己写.
下载ffmpeg里面有一个configure.sh文件
他是一个shell 脚本. 但是里面参数太多了,所以需要自己写一个build_android.sh.里面执行了configure.sh文件.
关系是这样的 build_android.sh 调用 configure.sh 调用 makefile 执行编译命令 得到相关的so文件
- 这里有个地方注意 如果你在windows下写好build_android.sh 再到linux上编译就编译不通过了. 需要直接在linux上写.
脚本名字随便写也可以不是bulid_android 但是执行的时候需要运行自己定义的名字.
#!/bin/bash
make clean
export NDK=/home/ndk/android-ndk-r16b
export SYSROOT=$NDK/platforms/android-14/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"
./configure --target-os=linux \
--prefix=$PREFIX --arch=arm \
--disable-doc \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
- NDK=/home/ndk/android-ndk-r16b 是安装ndk 的目录
- SYSROOT 最小兼容的版本 自己去看下NDK platforms目录下的最小版本 我这里14
- TOOLCHAIN 指定编译器.需要到你自己的linux的ndk目录下 找到对应的版本(直接去TOOLCHAIN目录下 xftp 拷贝即可)
- PREFIX 的路径 CPU 是 当前目录 ffmpeg/android/arm (pwd 当前目录 cpu前面赋值了) 这里都是shell脚本
- configure 前面说过的ffmpeg里面自带的sh脚本
- –disable-yasm 清除上一次信息
- –enable-shared \ 开启动态库
- -disable-static \ 禁止静态库
- disable-symver \禁止系统服务
- –disable-ffmpeg \ 禁止生成 下面的EXE文件
–disable-ffplay \
–disable-ffprobe \
–disable-ffserver \ 其他的路径都要核对一下…
- 执行 ./build_android.sh 发现少了很多路径
5.1 . 插一句 修改 configure 文件
- 执行 ./build_android.sh 发现少了很多路径
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)'
上面的替换主要是为了解决生成 so 文件的命名问题 要不然.so不是作为后缀生成的.
- 执行下面三句话
./configure
make
sudo make install
最后执行./build_android.sh 虽然编译了 但是没成功..
编译完成之后看下有没有android目录 如果没有就没成功
出现问题
- -bash: wget: command not found
解决: yum -y install wget
- 出现这个问题 yasm/nasm not found or too old. Use –disable-yasm for a crippled build.
解决
https://blog.csdn.net/yzhang6_10/article/details/75635734
# wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
# tar zxvf yasm-1.3.0.tar.gz
# cd yasm-1.3.0
# ./configure
# make && make install
arm-linux-androideabi-gcc is unable to create an executable file.
解决:
https://blog.csdn.net/mr_tony/article/details/50758786ZIP
一、安装支持ZIP的工具
yum install -y unzip zip
二、解压zip文件
unzip 文件名.zip
三、压缩一个zip文件
zip 文件名.zip 文件夹名称或文件名称
export TMPDIR=”E:/myroot/bwandroidspace/FFmpeg/jni/temp”
4, 安装 gcc
yum install gcc
ffbuild/config.mak: No such file or directory
nasm/yasm not found or too old. Use –disable-x86asm for a crippled build.
- /lib64/libc.so.6: version `GLIBC_2.14’ not found问题
1)下载:wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
2)解压:tar zxvf yasm-1.3.0.tar.gz
3)切换路径: cd yasm-1.3.0
4)执行配置: ./configure
5)编译:make
6)安装:make install
集成到android studio
普通集成so文件那样就行了