最近想学一下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/bashNDK=/path/to/ndkSYSROOT=$NDK/platforms/android-19/arch-arm/TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64function 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_FLAGmake clean allmake -j3make install}CPU=armPREFIX=$(pwd)/android/$CPUADDI_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目录下,国内百度的多是放在同级目录,怎么编译都编译不出来!

更多相关文章

  1. Building System之编译前的准备工作
  2. android DDMS 连接真机(己ROOT),用file explore看不到data/data文
  3. Android用Ant管理项目
  4. android怎么用APK调用JNI简单实例
  5. Android(安卓)EditText设置Filter以后,xml布局文件中maxLength不
  6. CMake Android(安卓)交叉编译
  7. 安卓系统修改host文件简单教程
  8. android 地图服务开发 INSTALL_FAILED_MISSING_SHARED_LIBRARY
  9. Android(安卓)通过反射调用获取内置存储和外置sd卡根路径(适用于

随机推荐

  1. 【android 蓝牙开发——传统蓝牙】
  2. java/android String和List的区别
  3. [Android] 收录几个比较火的安卓网
  4. android DexClassLoader动态加载技术详解
  5. android 中.9图片的用法 详解
  6. [置顶] 了解Android微信里的WebView是如
  7. Android蓝牙开发中电话音频(HSP,HFP)和媒体
  8. Android平板份额紧逼苹果 有望超越iPad
  9. 【转】UML建模與Android應用程式開發(上)
  10. 【Android归纳决】阿里笔试题之Android网