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中,大概走下面这个流程

1.选择创建新的虚拟机

2.拖动镜像到这个页面

3.选择拖入的镜像,点击继续

4.输入新建系统的密码,点击继续

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等命令行查看是否安装成功,如下:


检查工具包安装状态

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


1.打开搜索功能

2.搜索语言支持设置

3.下载我们需要的语言包

4.选择中文,点击apply

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


5.选择语言设置,选择中文

  上面这是设置系统显示的语言,不是输入法,然后再往下:
6.添加中文输入法语言包,注意选择中文->中文智能拼音

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

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

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

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

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

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文件,添加后,形如:


profile配置后

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

echo $NDK

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

ndk-build -v

  如果终端打印如下:


NDK配置成功显示

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

  • 下载FFmpeg源代码

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

选择对应系统

  然后往下滚动,点击下载,下载按钮如下:
点击下载

  下载我们文件其实不大,也就10m左右,解压后如下图:
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架构文件夹,接着进入,如下:

android编译成功后展示

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容