/androidFFmpeg4.0.2

在linux编译出android可用的最新版本 FFmpeg4.0.2

Primary LanguageC

androidFFmpeg4.0.2

在linux编译出android可用的最新版本 FFmpeg4.0.2

本人是用的是vmmare的编译环境是ubuntu17.10

首先下载好vmmare,然后下载ubuntu的iso镜像。创建好ubuntu虚拟机
然后在虚拟机上安装vvmare-tools,用来和win7共享文件,具体步骤可以google或者百度一下


然后在ubuntu上执行一下命令 apt-get update
apt-get install yasm
apt-get install pkg-config


下载ffmpeg和ndk(可以在虚拟机的目录中首先下载好,然后使用cp命令转移到linux系统中)
cp /mnt/hgfs/shareVM /home/csh/shareVM
(/mnt/hgfs/shareVM是ubuntu中和win共享的路径,/home/csh/shareVM是本人接下来要操作的路径)


下载ffmpeg 然后解压ffmpeg,本人的ffmpeg路径是 /home/csh/shareVM/ffmpeg-4.0.2
tar -zxvf 下载后的ffmpeg名称


下载ndk 解压 本人的ndk路径是 /home/csh/shareVM/android-ndk-r17b-linux-x86_64.zip
首先修改该目录的权限,暴力777权限全部搞定
chamod 777 -R /home/csh/shareVM/android-ndk-r17b-linux-x86_64.zip
然后压缩
unzip /home/csh/shareVM/android-ndk-r17b-linux-x86_64.zip
配置环境变量 vim ~/.bashrc
切换到输入模式 点击 按键 i 即可切换到输入模式
在最后面添加两行配置环境
export NDKROOT=/home/csh/shareVM/android-ndk-r17b
export PATH=$NDKROOT:$PATH
然后点击 Esc 切换到命令行模式 输入 :wq 保存并且退出
保存退出,更新一下环境变量
source ~/.bashrc


主题来了。要开始编译FFmpeg

cd /home/csh/shareVM/android-ndk-r17b
使用vim打开 configure
vi configure
找到如下代码 大概这个配置的49%的位置

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)'


新版的ffmpeg4.0以上删除了ffserver,不知道为什么要删除这个。如果知道请告知,感激不尽
在configure同级目录下新建build.sh 内容如下

#!/bin/bash
NDK=/home/csh/shareVM//android-ndk-r17b //唯一需要修改的地方。修改成自己的ndk路径
SYSROOT=$NDK/platforms/android-21/arch-arm/
CPU=armv7-a
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "


function build_android
{
#生成config.h
./configure \
--prefix=$PREFIX \
--enable-neon \
--enable-hwaccels \
--enable-shared \
--enable-decoder=h264_mediacodec \
--disable-static \
--disable-doc \
--disable-asm \
--enable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--enable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--cpu=armv7-a \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG


make clean
make -j4
make install
}
build_android

赋予脚本执行权限:chmod +x build.sh 执行脚本:./build.sh

等待10分钟左右,在build.sh 同级目录下会生成android文件夹 如果此时想使用android里面的so文件,使用cp复制到虚拟机目录会有问题 cp -r /home/csh/shareVM/android/ /mnt/hgfs/shareVM/ 由于文件系统不同,windows不支持链接,在复制cp的过程中会出现类似提示: cp: cannot create symbolic link : Operation not permitted 所以可以使用一下命令行 zip -r -q -o /home/csh/shareVM/android.zip /mnt/hgfs/shareVM/

大功告成