ubuntu下编译FFmpeg

 今天花了很长的时间,边网上搜索资料,边操作电脑,终于在Linux系统下把ffmpeg编译成功了。
 我用的是Windows10系统,装的虚拟机和ubuntu14.03系统。尽管网上有很多资料,我也参考了很多资料。
 我觉得还是必须把今天的成果记录下来。以后要再编译的话就可以直接照葫芦画瓢了。
  1. 第一步:下载linux版本的ndk,下载地址我使用的是http://wear.techbrood.com/tools/sdk/ndk/,下载的版本是android-ndk32-r10b-linux-x86_64.tar.bz2。下载到linux系统中,比如我放在/home/ldm/Downloads文件夹下,然后直接解压成android-ndk-r10b文件夹。并配置NDK的环境变量(linux系统这种说法不知道对不对),终端执行:
export NDK_HOME=/home/ldm/Downloads/android-ndk-r10b
export PATH=$NDK_HOME:$PATH
  1. 第二步:下载ffepeg资源工具包,下载地址非官网莫属:https://ffmpeg.org/ 。我选择了最新版本:ffmpeg_3.2.orig.tar.xz,对应地址是:https://launchpad.net/ubuntu/+source/ffmpeg/7:3.2-2,同样下载到/home/ldm/Downloads文件夹下,然后解压后,文件夹名为ffmpeg-3.2。
    下载页面图:
    ubuntu下编译FFmpeg_第1张图片
    下载后linux下文件目录图:
    ubuntu下编译FFmpeg_第2张图片
  2. 第三步:为了让编译出来的so库适合Android,对下载的ffmpeg的配置文件configure进行修改:
vi /home/ldm/ffmpeg-3.2/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)'

修改好之后保存即可。

  1. 第四步:编写编译对应的脚本文件,我直接在/home/ldm/Downloads/ffmpeg-3.2文件夹下新建了个android_arm.sh文件,文件内容如下:
#!/bin/bash
export TMPDIR=/home/ldm/Downloads/android_ffmpeg
NDK=/home/ldm/Downloads/android-ndk-r10b
SYSROOT=$NDK/platforms/android-16/arch-arm/
TOOLCHAIN=/home/ldm/Downloads/android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
CPU=arm
PREFIX=/home/ldm/Downloads/arm
ADDI_CFLAGS="-marm"
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--enable-small \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
build_one

文件内容相关介绍:
指定临时目录:指定一个临时目录,可以是任何路径,但必须保证存在,ffmpeg编译要用;

export TMPDIR=/home/ldm/Downloads/android_ffmpeg

指定NDK路径

NDK=/home/ldm/Downloads/android-ndk-r10b

3.指定使用NDK Platform版本:这里指定的ndk platform的路径,一定要选择比你的目标机器使用的版本低的,比如你的手机是android-15版本,那么就选择低于15的

SYSROOT=$NDK/platforms/android-16/arch-arm/

指定编译工具链

TOOLCHAIN=/home/ldm/Downloads/android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64

指定编译后的安装目录:这个目录是ffmpeg编译后的so的输出目录,会有一个include和lib文件夹生成在这里,这也是我们之后要在android apk中使用的.

TOOLCHAIN=/home/ldm/Downloads/android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64

保存android_arm.sh文件。

5.第五步:执行android_arm.sh文件等结果:

进入到文件所在的目录/home/ldm/Downloads/ffmpeg-3.2下,执行:

./android_arm.sh

等待了不到10分钟,结果就出来了。在arm文件夹下生成了includ及很多.so库文件,这就是我需要的.so库文件,如图:
ubuntu下编译FFmpeg_第3张图片
最后将lib文件夹中的 pkgconfig 目录和so的链接文件删除,只保留so文件,然后将include 和lib两个目录一起copy到自己项目下去编译即可。
参考学习网址:https://github.com/dxjia/ffmpeg-compile-shared-library-for-android

你可能感兴趣的:(NDK)