编译Android平台使用的FFmpeg库

目录

前言

一、编译环境

二、搭建环境

1.安装MSYS2

2.更新系统包

[2.1 打开MSYS2 MinGW 64-bit终端(mingw64.exe)](#2.1 打开MSYS2 MinGW 64-bit终端(mingw64.exe))

[2.2 更新所有软件包到最新版本](#2.2 更新所有软件包到最新版本)

[2.3 安装必要的工具和库。](#2.3 安装必要的工具和库。)

[3. 克隆FFmpeg源码](#3. 克隆FFmpeg源码)

[4. 配置编译选项](#4. 配置编译选项)

[5. 执行编译](#5. 执行编译)

总结

前言

记录学习编译android平台的ffmpeg库过程。本次介绍只是编译arm64-v8a

一、编译环境

环境:Win10 + MSYS2

NDK版本: 25.1.8937393

FFmpeg版本:ffmpeg-7.1

二、搭建环境

1.安装MSYS2

请前往MSYS2官方网站下载并按照说明进行安装。

安装一直下一步就可以了。默认安装路径:C:\msys64

2.更新系统包

2.1 打开MSYS2 MinGW 64-bit终端(mingw64.exe

在MINGW64 终端下windows的C盘和D盘的盘符显示的/c/ 和/d/, 可以用df -h命令查看(使用命令查看的时候,需要等待一会):

2.2 更新所有软件包到最新版本

bash 复制代码
pacman -Syu

如果提示需要重启shell,请按指示操作,并再次运行上述命令直到不再提示更新。

2.3 安装必要的工具和库

bash 复制代码
pacman -S base-devel mingw-w64-x86_64-toolchain git

3. 克隆FFmpeg源码

bash 复制代码
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg

在电脑上的路径:C:\msys64\home\Administrator\ffmpeg

4. 配置编译选项

在ffmpeg下面创建build_android.sh文件。文件内容如下:

/d/Android/SDK/ndk/25.1.8937393 为ndk为我电脑上的位置。其他人使用的时候可以把这个提取出来做一个变量修改一下。我懒的改😀😀

bash 复制代码
#!/bin/bash


#build arm64-v8a 
export CC="/d/Android/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/aarch64-linux-android21-clang"
export CXX="/d/Android/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/aarch64-linux-android21-clang++"
export AR="/d/Android/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/llvm-ar"
export AS="/d/Android/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/llvm-as"
export NM="/d/Android/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/llvm-nm"
export STRIP="/d/Android/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/llvm-strip"
export RANLIB="/d/Android/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/llvm-ranlib"

echo "CC is set to: $CC"
echo "CXX is set to: $CXX"
echo "AR is set to: $AR"
echo "AS is set to: $AS"
echo "NM is set to: $NM"
echo "STRIP is set to: $STRIP"
echo "RANLIB is set to: $RANLIB"
$CC --version

./configure \
    --prefix=android/arm64-v8a \
    --target-os=android \
    --arch=aarch64 \
    --cpu=armv8-a \
    --sysroot=/d/Android/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/sysroot \
    --enable-cross-compile \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-symver \
    --disable-programs \
    --disable-everything \
    --enable-decoder=libx264,h264,hevc,aac \
    --enable-parser=h264,hevc,aac \
    --enable-demuxer=mov \
	--enable-muxer=rtsp \
	--enable-protocol=file,rtsp,rtmp \
    --extra-cflags="-Os -fPIC" \
    --extra-ldflags="" \
    --cc="$CC" \
    --cxx="$CXX" \
	--strip="$STRIP"

make clean
make -j$(nproc)
make install

里面有好多的echo输出,加这个是刚开始编译的时候一直失败,后来测试发现export的环境变量失败了。

configure 下面的参数还是很多的。不一一介绍了,需要的同学可以自己搜索一下。可能主要是编码和解码格式的支持,参数是--enable-decoder , --enable-parser

5. 执行编译

给脚本赋予可执行权限并运行

bash 复制代码
chmod +x build_android.sh
./build_android.sh

编译成功后,直接显示这样:

在ffmpeg目录下会生成一个android文件夹,里面有arm64-v8a

如果有需要的同学也可以直接下载哈

下载地址


总结

以上就是本次要讲的内容。

相关推荐
BD_Marathon1 小时前
【MySQL】函数
android·数据库·mysql
西西学代码2 小时前
安卓开发---耳机的按键设置的UI实例
android·ui
maki0776 小时前
虚幻版Pico大空间VR入门教程 05 —— 原点坐标和项目优化技巧整理
android·游戏引擎·vr·虚幻·pico·htc vive·大空间
千里马学框架6 小时前
音频焦点学习之AudioFocusRequest.Builder类剖析
android·面试·智能手机·车载系统·音视频·安卓framework开发·audio
fundroid10 小时前
掌握 Compose 性能优化三步法
android·android jetpack
TeleostNaCl11 小时前
如何在 IDEA 中使用 Proguard 自动混淆 Gradle 编译的Java 项目
android·java·经验分享·kotlin·gradle·intellij-idea
旷野说12 小时前
Android Studio Narwhal 3 特性
android·ide·android studio
maki07718 小时前
VR大空间资料 01 —— 常用VR框架对比
android·ue5·游戏引擎·vr·虚幻·pico
xhBruce1 天前
InputReader与InputDispatcher关系 - android-15.0.0_r23
android·ims
领创工作室1 天前
安卓设备分区作用详解-测试机红米K40
android·java·linux