Android集成ffmpeg

做多媒体,离不开ffmpeg。互联网时代,离不开Android。所以,Android集成ffmpeg的需求,来开发多媒体相关功能,越来越多。

幸运的是,github已经有专门的项目,来跟进。集成ffmpeg变的简单了。

1. 下载源码

项目地址:https://github.com/tanersener/mobile-ffmpeg

2. 编译准备

先设置2个环境变量。

export ANDROID_HOME=<Android SDK Path>
export ANDROID_NDK_ROOT=<Android NDK Path>

请注意,mobile-ffmpeg有要求最低版本号:

Android SDK 4.1 Jelly Bean (API Level 16) or later
Android NDK r21 or later with LLDB and CMake

Android sdk路径,就是你AndroidStudio的SDK路径。如果不知道在哪里,就打开AndroidStudio -> Tools -> SDK Manager。
在这里插入图片描述
ndk呢,也可以通过AndroidStudio下载一个。

还是Tools -> SDK Manager,点击SDK Tools 面板, Show Packages Details选中,然后NDK选择一个版本。

注意,mobileffmpeg有要求NDK的版本,如果没有,会编译失败。例如,我就遇到如下错误:

> No version of NDK matched the requested version 21.3.6528147. Versions available locally: 20.0.5594570, 20.1.5948944, 20.1.5948944

怎么看mobile-ffmpeg需要什么版本呢?打开如下文件:
./android/app/build.gradle
里面会写ndkVersion,我这里的是:

ndkVersion "21.3.6528147"

于是,我在AndroidStudio就需要下载这个版本。
在这里插入图片描述

下载好以后,上面的ANDROID_NDK_ROOT环境变量,就设置为具体路径。最后我设置的是:

export ANDROID_HOME=/home/chenxiaofeng/Android/Sdk
export ANDROID_NDK_ROOT=/home/chenxiaofeng/Android/Sdk/ndk/21.3.6528147

你也可以把这2个设置,写到home目录的 .bashrc文件,这样每次打开Terminal都会自动设置了。

3. 编译

编译只需要执行android.sh,默认不会加ffmpeg的额外模块,CPU类型也会全部编译。如果要定制,就加参数。具体参数,可以来个–help了解一下

$ ./android.sh --help

'android.sh' builds FFmpeg and MobileFFmpeg for Android platform. By default five Android ABIs (armeabi-v7a, armeabi-v7a-neon, arm64-v8a, x86 and x86_64) are built without any external libraries enabled. Options can be used to disable ABIs and/or enable external libraries. Please note that GPL libraries (external libraries with GPL license) need --enable-gpl flag to be set explicitly. When compilation ends an Android Archive (AAR) file is created under the prebuilt folder.

Usage: ./android.sh [OPTION]...

Specify environment variables as VARIABLE=VALUE to override default build options.

Options:
  -h, --help			display this help and exit
  -v, --version			display version information and exit
  -d, --debug			build with debug information
  -s, --speed			optimize for speed instead of size
  -l, --lts			build lts packages to support API 16+ devices
  -f, --force			ignore warnings

Licensing options:
  --enable-gpl			allow use of GPL libraries, created libs will be licensed under GPLv3.0 [no]

Platforms:
  --disable-arm-v7a		do not build arm-v7a platform [yes]
  --disable-arm-v7a-neon	do not build arm-v7a-neon platform [yes]
  --disable-arm64-v8a		do not build arm64-v8a platform [yes]
  --disable-x86			do not build x86 platform [yes]
  --disable-x86-64		do not build x86-64 platform [yes]

Libraries:
  --full			enables all external libraries
  --enable-android-media-codec	build with built-in Android MediaCodec support[no]
  --enable-android-zlib		build with built-in zlib support[no]
  --enable-chromaprint		build with chromaprint [no]
  --enable-fontconfig		build with fontconfig [no]
  --enable-freetype		build with freetype [no]
  --enable-fribidi		build with fribidi [no]
  --enable-gmp			build with gmp [no]
  --enable-gnutls		build with gnutls [no]
  --enable-kvazaar		build with kvazaar [no]
  --enable-lame			build with lame [no]
  --enable-libaom		build with libaom [no]
  --enable-libass		build with libass [no]
  --enable-libiconv		build with libiconv [no]
  --enable-libilbc		build with libilbc [no]
  --enable-libtheora		build with libtheora [no]
  --enable-libvorbis		build with libvorbis [no]
  --enable-libvpx		build with libvpx [no]

比如我的需求,是值需要armv8,且需要编译libvpx & libopus,则编译命令如下:

./android.sh --disable-arm-v7a --disable-arm-v7a-neon --disable-x86 --disable-x86-64 --enable-libvpx --enable-android-media-codec --enable-opus

编译结果,会帮我们打包出aar,内部有简单的JNI封装和so。

Building mobile-ffmpeg library for Android

Architectures: arm64-v8a
Libraries: android-media-codec, cpu-features, libvpx, opus

Building arm64-v8a platform on API level 24

libvpx: already built
opus: already built
cpu-features: already built

ffmpeg: ok

mobile-ffmpeg: ok


Creating Android archive under prebuilt/android-aar: ok

如果你编译出错,可以打开源码目录下的build.log,根据日志具体看什么问题。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要在Android系统中集成FFmpeg框架,需要进行以下步骤: 1. 下载FFmpeg:从FFmpeg官网下载最新的源代码压缩包。 2. 解压源代码:将下载的压缩包解压到你的开发机器上。 3. 配置交叉编译环境:由于FFmpeg是在Linux环境下开发的,所以需要配置交叉编译环境来生成适用于Android系统的库文件。你可以使用Android NDK提供的工具链进行交叉编译。 4. 配置FFmpeg编译选项:进入FFmpeg源代码目录,运行`./configure`命令配置编译选项。你需要指定目标平台为Android,并选择需要编译的模块,如解码器、编码器等。还可以通过添加`--prefix`选项指定输出路径。 5. 编译FFmpeg库:运行`make`命令编译FFmpeg库。根据你的系统环境和配置选项,可能需要使用`-j`参数指定并发编译的线程数。 6. 安装生成的库文件:运行`make install`命令将生成的库文件安装到指定路径。你可以选择将库文件安装到系统目录或自定义的目录。 7. 配置Android项目:在你的Android项目中,配置NDK构建脚本(如CMake或ndk-build)以引用编译生成的FFmpeg库文件。你需要设置正确的库路径和链接选项,以及指定需要使用FFmpeg的源代码文件。 8. 在代码中使用FFmpeg:通过JNI在Java代码中调用C/C++代码,使用FFmpeg提供的接口进行音视频处理。你可以参考FFmpeg的官方文档和示例代码来学习如何使用FFmpeg。 这是一个基本的集成步骤,具体过程可能因项目架构和使用的开发工具而有所差异。集成FFmpeg需要一定的编译和配置知识,建议在集成前先了解FFmpeg的使用文档和相关资源。另外,请注意在集成过程中遵循FFmpeg的许可协议要求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

newchenxf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值