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

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

搭建NDK环境

一、建立NDK目录,而且上传Linux版本的NDKlinux

搭建ndk环境.png

这里使用的ndk版本是r10eandroid

二、赋予ndk文件夹下全部文件的drwx权限,使其可执行。shell

搭建ndk环境.png

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

三、解压执行.bin文件bash

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

搭建ndk环境.png

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

四、环境变量配置ide

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

export NDKROOT=/usr/ndk/android-ndk-r10e
export PATH=$NDKROOT:$PATH
复制代码

搭建ndk环境.png

五、更新环境变量

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

搭建ndk环境.png

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

编译FFmpeg

官网下载FFmpge. zip

FFMPEG.png

FFMPEG.png

FFMPEG.png

这里使用FFmpeg 2.6.9版本。

一、上传文件

使用xftp上传ffmpeg压缩包到Ubuntu

FFMPEG.png

二、解压FFmpeg

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

FFMPEG.png

Xftp查看,显示解压文件

FFMPEG.png

三、编写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:生成共享库。

四、build_android.sh给予权限。

FFMPEG.png

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

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

FFMPEG.png

五、执行文件build_android

使用./build_android.sh命令执行

FFMPEG.png

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

六、安装dos2unix

命令:sudo apt-get install tofrodos

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

FFMPEG.png

说明: 若是出现问题:bad interpreter : No such file or directory,缘由:没有将文件转成Linux编码格式。

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

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

七、再次执行文件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
相关文章
相关标签/搜索