基于android ndk-r15 生成ffmpeg4.0 .so库

最近想学一下android 端的ffmpeg开发,刚开始就卡在了第一步:ubuntu18.04下基于android ndk-r15 生成ffmpeg4.0的so库,百度了好多方法,都没弄出来,挣扎了一天多翻墙看了篇文章弄了出来:

https://medium.com/@karthikcodes1999/cross-compiling-ffmpeg-4-0-for-android-b988326f16f2

关键地方:

把ffmept源码放在andorid ndk的sources目录下,国内百度的多是放在同级目录,怎么编译都编译不出来!

翻译原文:

交叉编译用于Android的ffmpeg4.0

你好,开发者,你来这里是因为你需要在你的项目中处理视频,FFmpeg是最好的和最容易的(一旦你使它对android可用)多媒体任务的可用解决方案。所以,不要再浪费时间了,让我们进入正题吧。

步骤0:工作环境:

如果你使用的是Windows系统,我强烈建议你用Ubuntu 16.04双启动你的电脑。不要浪费你的时间在窗户上做这件事。
下面的所有说明都经过了测试,适用于Ubuntu。

步骤1:下载先决条件:

  1. Android-ndk-r15c -在我写这篇文章的时候,Androud-ndk-r17是最新的,但是从r16开始,ndk在交叉编译FFmpeg时开始出现问题。所以r16以下的都可以。下载地址:https://dl.google.com/android/repository/android-ndk-r15c-linux-x86_64.zip
  2. FFmpeg 4.0 -这是FFmpeg的最新版本时,这个博客是写出来的。这里下载:https://ffmpeg.org/releases/ffmpeg-4.0.tar.bz2。
    就这样,您已经准备好进入步骤2。

第二步 配置FFmpeg:

对于本文的其余部分,我假设到你的NDK的路径是/path/to/ NDK,到你的ffmpeg的路径是/path/to/ffmpeg。现在,将ffmpeg移动到NDK中的sources文件夹。新的ffmpeg路径应该是这样的,/path/to/ndk/sources/ffmpeg-4.0
在我们真正配置ffmpeg之前,ffmpeg在默认情况下被配置为具有版本代码(例如:libavcodec-10.so),但是android无法识别这些文件,所以您所需要做的就是替换/path/to/ffmpeg/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)'

现在在ffmpeg文件夹中,创建一个新的构建脚本,并将其命名为ffmpeg_android。sh(“只是一个随机的名字”)。将下面的命令复制粘贴到文件中

#!/bin/bash
NDK=/path/to/ndk
SYSROOT=$NDK/platforms/android-19/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffplay \
--disable-ffprobe \
--disable-doc \
--disable-symver \
--enable-protocol=concat \
--enable-protocol=file \
--enable-muxer=mp4 \
--enable-demuxer=mpegts \
--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 all
make -j3
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one

请记住将/path/to/ndk替换为本地机器中的ndk路径。

步骤3:运行脚本文件:

在运行上面的脚本文件之前,请确保为该文件提供了所需的权限,然后运行命令
chmod 777 ffmpeg_android.sh

然后执行该.sh文件

sudo ./ffmpeg_android.sh

喝杯茶,让你的机器在接下来的20分钟里工作。
几分钟后(取决于您的机器的架构),您将发现这个路径/路径/到/ffmpeg/android/arm
在那里你可以看到一些文件夹,像“Include”,“lib”…等。
打开lib文件夹,你可以找到各种各样的. so文件(一个没有版本名,一个有版本名)一个没有版本名是符号链接。
失去了某个地方?请在文章下面发表评论。
成功完成吗?查看我的下一篇文章,使用android JNI将SO文件集成到我们的android项目中。

关键地方:

把ffmept源码放在andorid ndk的sources目录下,国内百度的多是放在同级目录,怎么编译都编译不出来!

发布了43 篇原创文章 · 获赞 9 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_38355313/article/details/85398810