云服务器Ubuntu下搭建NDK环境,并编译FFmpeg

2,712 阅读3分钟

基于《云服务器Ubuntu基本配置》这篇文章,已经搭建好了云服务器,这篇文章使用Ubuntu编译FFmpeg。

搭建NDK环境

1、创建NDK目录,并且上传Linux版本的NDK

搭建ndk环境.png

这里使用的ndk版本是r10e

2、赋予ndk文件夹下所有文件的drwx权限,使其可执行。

搭建ndk环境.png

chmod 777 -R ndk NDK目录给予权限之后,可看到.bin文件显示成绿色(可执行)了。

3、解压执行.bin文件

ndk目录下,./android-ndk-r10e-linux-x86_64.bin执行文件。

搭建ndk环境.png

上图显示已经执行完成了。

4、环境变量配置

使用命令vim ~/.bashrc进入环境配置文件,添加

export NDKROOT=/usr/ndk/android-ndk-r10e
export PATH=$NDKROOT:$PATH

搭建ndk环境.png

5、更新环境变量

使用命令source ~/.bashrc更新环境变量

搭建ndk环境.png

至此,NDK环境已经搭建好了。

编译FFmpeg

官网下载FFmpge. zip

FFMPEG.png

FFMPEG.png

FFMPEG.png

这里使用FFmpeg 2.6.9版本。

1、上传文件

使用xftp上传ffmpeg压缩包到Ubuntu

FFMPEG.png

2、解压FFmpeg

使用命令unzip ffmpeg-2.6.9.zip解压文件

FFMPEG.png

Xftp查看,显示解压文件

FFMPEG.png

3、编写shell脚本文件

build_android.sh文件:

#!/bin/bash
make clean
export NDK=/usr/ndk/android-ndk-r10e
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/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

注意:

1)换行的时候需要有\,注意不要有额外的空格,否则编译出错

2)脚本文件统一转为UTF-8无BOM格式。可通过note pad++进行转码,或者先由Linux创建文件再由Windows编辑。

3)NDK尽量不要使用太新的版本,一般使用Android-9即可,否则新版本会出现不兼容的问题。

4)将编写好的shell脚本放在解压后的ffmpeg-2.6.9文件夹中。

FFMPEG.png

指定NDK路径:export NDK=/usr/ndk/android-ndk-r10e; 配置CPU架构类型:export CPU=arm,PREFIX是指定动态库输出的路径,然后disable一些不需要的库(可减小输出的动态库的大小); enable-shared:生成共享库。

4、build_android.sh给予权限。

FFMPEG.png

显示build_android.sh没有执行权限。

使用chmod 777 build_android.sh命令,给予build_android.sh执行权限。

FFMPEG.png

5、执行文件build_android

使用./build_android.sh命令执行

FFMPEG.png

报错command not found没有make命令。安装make:sudo apt-get install make

6、安装dos2unix

命令:sudo apt-get install tofrodos

这里的文件是在window下创建的,需要使用dos2unix build_android.sh命令转换下文件。

FFMPEG.png

说明: 如果出现问题:bad interpreter : No such file or directory,原因:没有将文件转成Linux编码格式。

转换Linux编码格式有两种方式:

1、在Linux下创建这个文件touch build_android.sh,从Linux传出到桌面把脚本命令拷入这个文件中,上传到Linux;
2、使用 dos2unix build_android.sh 转成Linux编码格式

7、再次执行文件build_android

编译:

FFMPEG.png

FFMPEG.png

上图就是编译完成生成动态库。

生成的动态库有.56,.5的库,这种库Android很难加载到,我们需要的是后缀.so的库,这就需要修改configure文件。

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

重新编译,生成动态库:

FFMPEG.png