FFmpeg编译安卓平台

  作为音视频的爱好者,不可避免是要接触这些厉害的三方库,ffmpeg作为其中的佼佼者,更是深受广大读者的喜爱,今天就来一起学习一下如何编译ffmpeg。
  首先编译ffmpeg需要一些必备条件。

  • 搭建Ubuntu系统
  • 配置NDK环境(用于编译到安卓平台)
  • 下载FFmpeg源代码
  • 编译FFmpeg

  我列了几个重要的点,读者可以跟随节点一点点实现(作者用的是mac系统,下面一些软件展示的界面可能和window的不一致,但是无伤大雅)。

  • 搭建Ubuntu系统

  我这里是通过VMware虚拟机创建的Ubuntu系统,我下载的是:VMware-Fusion-11.5.1-15018442.dmg版本的,这个版本影响应该不大,朋友们可以自行选择,安装之后需要填写序列号,我这里有个现成的:7HYY8-Z8WWY-F1MAN-ECKNY-LUXYX,但是后来VMware提示我升级到最新版就是免费的,叫我升级(我下载的时候你不告诉我?)
  VMware下载地址
  下载好了之后我们还需要下载Ubuntu的镜像(就是ubuntu系统),我的版本是:ubuntu-19.10-desktop-amd64。
  Ubuntu下载地址
  好了,俩个下载之后,我们打开VMware,然后把ubuntu的镜像拖到VMware中,大概走下面这个流程

FFmpeg编译安卓平台_第1张图片
1.选择创建新的虚拟机

FFmpeg编译安卓平台_第2张图片
2.拖动镜像到这个页面

FFmpeg编译安卓平台_第3张图片
3.选择拖入的镜像,点击继续

FFmpeg编译安卓平台_第4张图片
4.输入新建系统的密码,点击继续

FFmpeg编译安卓平台_第5张图片
5.点击完成,自定义设置中可以设置安装位置等

  走完这五步之后,接下来等待系统安装完毕即可,时间可能几个小时以上,中途可能会下载东西,请保证网络流畅。

  安装完成之后,我们输入密码就可以进入系统,Ubuntu系统桌面如下:


Ubuntu桌面

  然后我们需要使用一些命令行来安装一些系统需要的软件包,apt-get是Linux系统控制软件升级安装的命令行,我们使用这些命令可以安装文件等,我们在控制台,快捷键:control + alt + t 打开控制台,依次输入下面命令行:

apt-get update
apt-get install yasm
apt-get install pkg-config
apt-get install gcc

  如果提示权限不够,我们就在每个命令行前面添加 sudo 然后执行。
最后可以用过yasm --version等命令行查看是否安装成功,如下:


FFmpeg编译安卓平台_第6张图片
检查工具包安装状态

  默认Ubuntu系统使用的是英文,想切换成中文显示和中文输入法的,往下看8个步骤。


1.打开搜索功能

FFmpeg编译安卓平台_第7张图片
2.搜索语言支持设置

FFmpeg编译安卓平台_第8张图片
3.下载我们需要的语言包

FFmpeg编译安卓平台_第9张图片
4.选择中文,点击apply

  上面是进行下载中文输入法语言包,大概100多m,需要等待,下载结束后,关闭这个页面,然后打开系统设置页面,找到如下:


FFmpeg编译安卓平台_第10张图片
5.选择语言设置,选择中文

  上面这是设置系统显示的语言,不是输入法,然后再往下:
FFmpeg编译安卓平台_第11张图片
6.添加中文输入法语言包,注意选择中文->中文智能拼音

  我这一步就显示了中文是因为我第五步完成后,重启系统了,语言就会切换过来,但是也可以第五六步一起做,第五步做完后,重新系统,会弹出下面:
FFmpeg编译安卓平台_第12张图片
7.是否更改目录名称

  提示了是否需要更改目录名称从英文到中文,可自行选择,然后我们看一下系统右上角:
8.选择中文智能拼音

  至此,系统语言和输入法我们算是配好了,可以正常在浏览中输入了,这一步成功,可以开始下一步了。

  • 配置NDK环境(用于编译到安卓平台)

  搭建NDK的环境主要是为了能够将FFmpeg功能编译到安卓平台上进行使用,我这用的版本是:android-ndk-r19c。
  NDK下载地址。
  下载之后我们需要放在Ubuntu里面的解压,当然,在window或mac解压后拖入Ubuntu系统中也可以,我这里是放在根目录下新建的ndk文件夹中。
  然后配置一下NDK的环境变量,我们按快捷键:control + alt + t
,打开命令行终端,输入:sudo vi /etc/profile,然后可能提示需要输入密码,就输入我们之前设置的系统密码即可,然后打开后可以看到如下:

FFmpeg编译安卓平台_第13张图片
profile文件内容

,我们需要把刚才配置的NDK路径放在这个文件的末尾中,形如:

export NDK_HOME=/home/simpo/ndk/android-ndk-r19c
export PATH=$NDK_HOME:$PATH

  这里需要注意的是,我上面说了我NDK放在了根目录的新建ndk目录下,但是我这里写的是/home/simpo/ndk/android-ndk-r19c,其实这里的simpo就是我们的用户名,这里是必不可少的,不然之后的编译会出现各种莫名其妙的问题(我都不想说了),android-ndk-r19c则是我们解压后的NDK文件,添加后,形如:


FFmpeg编译安卓平台_第14张图片
profile配置后

  这里我们可能会遇到打错一个单词就删除不了情况,按delete或者上下左右都没作用,只是切换字母,我们可以按一下ESC,然后就可以控制上下左右了,需要删除某一个字母就把光标移动到字母上,然后按 : 再按字母d,再按enter,就删除这个字母,如果想删除一整行,光标就移动到这一行,然后按 : 再按字母dd,再按enter,就可以删除整行(要说为什么这么复杂,为什么不问问神奇的海螺呢?)。
  做好之后,我们按 : 再按wq,就可以保存并退出了,退出之后再输入命令行:source /etc/profile,使之生效。那如何检测是否配置好了呢,我们可以再输入命令行:

echo $NDK

  就会打印出刚才设置的NDK路径,再输入命令行:

ndk-build -v

  如果终端打印如下:


FFmpeg编译安卓平台_第15张图片
NDK配置成功显示

  那就恭喜你,配置成功了,可以进行下一步了。

  • 下载FFmpeg源代码

  关于FFmpeg的代码,我们可以从官网上进行下载,FFmpeg下载地址,这里我选的版本是:FFmpeg-n4.1.3.tar.gz。首先选择需要下载的系统,有三分,我这里选了Linux,点击下面红框部分:

FFmpeg编译安卓平台_第16张图片
选择对应系统

  然后往下滚动,点击下载,下载按钮如下:
FFmpeg编译安卓平台_第17张图片
点击下载

  下载我们文件其实不大,也就10m左右,解压后如下图:
FFmpeg编译安卓平台_第18张图片
FFmpeg源代码图

  这里就不再解释各个文件的作用了,然后把FFmpeg的整个代码放在Ubuntu系统中,到此这一步成功完成。

  • 编译FFmpeg

  终于到最后一步了,如果我们需要编译成到安卓平台的so文件,我们就按下面的步骤开始。
  首先打开源代码目录,找到文件名为: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)' 

  其实高版本中已经有了安卓的配置,上面的不替代其实也无妨,如果不懂的最好写上。
  然后我们需要新建一个文件build.sh,注意是文件,不是文件夹,有的同学可能不知道怎么新建文件,我们可以打开终端,然后逐步cd到我们的FFmpeg源代码目录下,然后运行命令行:

touch  build.sh

  我们再看就发现生成了一个build.sh文件,然后双击打开,然后复制以下配置(只需要替换其中的ndk安装的路径即可),下面的配置对应的ndk版本是17,ffmpeg的版本是4.1.3,如果不懂编译配置的,最好ndk和ffmpeg的版本和我这里的保持一致,因为不同的版本都有不同的写法:

#!/bin/bash
export TMPDIR=../temp
NDK=/home/simpo/ndk/android-ndk-r17c
SYSROOT=${NDK}/platforms/android-23/arch-arm/
PLATFORM=${NDK}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
function build
{
   ./configure \
    --prefix=$PREFIX \
    --target-os=android \
    --arch=$CPU \
    --enable-shared \
    --enable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-avdevice \
    --disable-symver \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --cross-prefix=$PLATFORM/bin/arm-linux-androideabi- \
    --cross-prefix-clang=$PLATFORM/bin/arm-linux-androideabi- \
    --extra-cflags="-I$SYSROOT/usr/include -isysroot $NDK/sysroot -I$NDK/sysroot/usr/include/arm-linux-androideabi" \
    --extra-ldflags="-L$SYSROOT/usr/lib"
    $ADDITIONAL_CONFIGURE_FLAG
    make clean
    make -j4
    make install
}
CPU=arm-v7a
PREFIX=../os
build

  有时候遇到错误提示不要怕,拿去百度会有很多解答。
  里面的NDK后面跟的内容,我们需要设置成我们安装的NDK位置,我们需要更改以下,我就是放在根目录下的新建ndk文件中,仍然需要注意的是,多了一个simpo是我们的用户名,这一个一定要写上!!!(作者被这个不起眼的问题折腾了很久)
  然后保存后我们再打开终端,逐步到FFmpeg的根目录下,运行以下命令行:

chmod  +x   build.sh 

  这是给予文件权限,然后运行:

./build.sh

  开始运行,等待10分钟左右不出意外就可以编译成功。有的朋友好奇为什么命令行这么写,这是shell的语法,包括我们的build.sh这文件内都是shell的语法,需要更多的了解请前往:
  shell语法
  编译成功后我们可以在FFmpeg的根目录下发现一个android文件夹,打开如下,会看见我们编译支持的cpu架构文件夹,接着进入,如下:

FFmpeg编译安卓平台_第19张图片
android编译成功后展示

  到这我们算是整个编译成功了,如果andorid平台需要使用FFmpeg的功能,就可以使用lib文件夹下面的so文件了,这里不做更多介绍。

你可能感兴趣的:(FFmpeg编译安卓平台)