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。
    下载页面图:

    下载后linux下文件目录图:
  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文件,如图:

最后将lib文件夹中的 pkgconfig 目录和so的链接文件删除,只保留so文件,然后将include 和lib两个目录一起copy到自己项目下去编译即可。
参考学习网址:https://github.com/dxjia/ffmpeg-compile-shared-library-for-android

相关文章

目录前言一、创建Hadoop用户二、更新apt和安装Vim编辑器三、...
原文连接:https://www.cnblogs.com/yasmi/p/5192694.html ...
电脑重启后,打开VirtualBox,发现一直用的虚拟机莫名的消失...
参见:https://blog.csdn.net/weixin_38883338/article/deta...
Ubuntu 18.04 LTS 已切换到 Netplan 来配置网络接口。Netpla...
介绍每个 Web 服务都可以通过特定的 URL 在 Internet 上访问...