FFmpeg For Android (二) Ubuntu下编译FFmpeg源码

来源:互联网 发布:河南卫视直播网络直播 编辑:程序博客网 时间:2024/04/29 17:33

根据上一篇文章《FFmpeg For Android (一) 在Windows7下安装Ubuntu虚拟系统》安装并熟悉了Ubuntu 接下来开始编译FFmpeg 以下教程面向Android开发者

1.下载相关文件

首先去下载FFmpeg的源码 (国内在git下的话太慢了 经常中断)

FFmpeg下载 http://www.ffmpeg.org/download.html

我下载了ffmpeg-3.2.tar.bz2 版本

然后下载NDK android-ndk-r10e-linux-x86_64.bin 建议r10e版本 (下载慢的用迅雷 不需要翻墙)

NDK r10e下载 http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin 

2.配置环境

运行Ubuntu系统 在桌面创建如下路径的文件夹

Android/NDK/Android/FFmpeg/

把刚才下载的ffmpeg-3.2.tar.bz2和android-ndk-r10e-linux-x86_64.bin文件复制到相应文件夹内

如果使用windows下载的, 直接拖动文件到虚拟机Ubuntu桌面也行

打开终端 cd到NDK的目录并安装bin文件:

cd /home/ubuntu/桌面/Android/NDKsudo chmod u+x android-ndk-r10e-linux-x86_64.bin./android-ndk-r10e-linux-x86_64.bin

输入管理员密码然后自动解压

解压完成显示Everything is Ok 如果不是 请重新来一遍

配置NDK环境变量

终端输入

sudo gedit /etc/profile

然后在文件末尾添加以下两条

export ANDROID_NDK= 你的ndk路径(注意看图,我怎么写的)export PATH=$ANDROID_NDK:$PATH

然后点击右上角保存

然后再输入:

source /etc/profile. /etc/profile

然后就配置好了

如图,我的是这样的

然后终端继续输入:

ndk-build -v

可查看ndk配置信息 有以下反应则成功 否则检查你漏了哪些步骤重新再来

如图:

3.编译FFmpeg

回到刚才Android/FFmpeg/目录 把ffmpeg-3.2.tar.bz2压缩文件给解压到当前目录 (右键>提取到此处)

为了不生成版本号, 到解压后的文件里找到configure文件(否则生成的文件会显示版本安卓用不了)

右键>使用gedit打开修改

直接搜索找到以下位置,把以下代码

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)''

然后保存并关闭

然后仍然在Android/FFmpeg/目录下新建脚本文件 取名为build_android.sh

并编辑内容如下:

# build_android.shNDK=你的NDK路径SYSROOT=$NDK/platforms/android-9/arch-arm/TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64function build_android{./configure \--prefix=你的FFmpeg路径/android/arm \--enable-neon \--enable-hwaccel=h264_vaapi \--enable-hwaccel=h264_vaapi \--enable-hwaccel=h264_dxva2 \--enable-hwaccel=mpeg4_vaapi \--enable-hwaccels \--enable-shared \--enable-jni \--enable-mediacodec \--disable-static \--disable-doc \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-ffserver \--disable-avdevice \--disable-doc \--disable-symver \--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_FLAGmake cleanmake -j4make install}ADDI_CFLAGS="-marm"build_android

注意,仔细检查以上配置的NDK和FFmpeg路径是否存在并正确,一般问题都出在这一步 因为我写的教程和你的系统路径不太一样 所以建议请按我的教程提供的下载链接下载相关文件 (我肯定亲测过可以的)

编辑完保存

我是这样的

贴出来给你们复制下

# build_android.shNDK=/home/ubuntu/桌面/Android/NDK/android-ndk-r10eSYSROOT=$NDK/platforms/android-9/arch-arm/TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64function build_android{./configure \--prefix=/home/ubuntu/桌面/Android/FFmpeg/ffmpeg-3.2/android/arm \--enable-neon \--enable-hwaccel=h264_vaapi \--enable-hwaccel=h264_vaapi \--enable-hwaccel=h264_dxva2 \--enable-hwaccel=mpeg4_vaapi \--enable-hwaccels \--enable-shared \--enable-jni \--enable-mediacodec \--disable-static \--disable-doc \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-ffserver \--disable-avdevice \--disable-doc \--disable-symver \--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_FLAGmake cleanmake -j4make install}ADDI_CFLAGS="-marm"build_android

然后回到终端, cd到这个sh脚本的位置并执行,如下:

cd /home/ubuntu/桌面/Android/FFmpeg/ffmpeg-3.2chmod a+x build_android.sh./build_android.sh

如图

按回车开始编译… 等待编译完毕
此时 关键的一刻来了 这里你们可能会有遇到各种情况 请看文章下面的常见问题

( 编译过程中如果出现什么问题要中断的 按Ctrl+C中断, 编译过程中会出现一些警告, 请无视)

最后 编译完成是这样子的(出现一堆INSTALL XXXXX) 没有提示Error什么的

编译完成 so文件都在这里

/home/ubuntu/桌面/Android/FFmpeg/ffmpeg-3.2/android/arm/lib

呐~ 如图

4.常见错误

1.如果提示一个”括号’ 语法错误’ 时, 把文本的括号取消换行

如:

function build_android{  xxx...}

改成这样解决

function build_android{ xxxx...}

2.如果提示 ‘build_android function 没找到’ 的错误

请无视, 系统问题.

3.如果提示没找到ndk/FFmpeg

那就检查ndk/FFmpeg路径 仔细检查并且对比你自己的ubuntu有没有这个目录 否则改正过来

4.注意终端面板最好一直开启不要关闭 配置好ndk后有些系统有问题 在编译ffmpeg时提示没找到ndk环境

解决办法是重复一遍ndk配置:

终端输入

sudo gedit /etc/profile

不作修改 然后再回到终端输入

source  /etc/profile. /etc/profile

然后此时重新执行build_android.sh

cd /home/ubuntu/桌面/Android/FFmpeg/ffmpeg-3.2chmod a+x build_android.sh./build_android.sh

然后再输入ndk-build -v 便神奇的找到了NDK路径 并且打印了版本
趁此机会 立刻执行build_android.sh 编译ffmpeg 成功 (我编译了好几次 遇到两次这样的情况)

5.如果提示./configure什么语法错误…什么 没找到config.make之类的一堆错误…
此时可能你正在编辑build_android.sh 试试把已打开正在编辑build_android.sh文件的文本编辑器关闭
然后关闭终端 重新打开终端执行build_android.sh编译

6.如果还有其他问题请重新按本教程来一遍 #

0 0
原创粉丝点击