编译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

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

下载地址


总结

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

相关推荐
水瓶丫头站住35 分钟前
安卓APP如何适配不同的手机分辨率
android·智能手机
xvch1 小时前
Kotlin 2.1.0 入门教程(五)
android·kotlin
xvch5 小时前
Kotlin 2.1.0 入门教程(七)
android·kotlin
浩宇软件开发6 小时前
Android开发,待办事项提醒App的设计与实现(个人中心页)
android·android studio·android开发
ac-er88886 小时前
Yii框架中的多语言支持:如何实现国际化
android·开发语言·php
苏金标7 小时前
The maximum compatible Gradle JVM version is 17.
android
zhangphil7 小时前
Android BitmapShader简洁实现马赛克,Kotlin(一)
android·kotlin
iofomo12 小时前
Android平台从上到下,无需ROOT/解锁/刷机,应用级拦截框架的最后一环,SVC系统调用拦截。
android
我叫特踏实12 小时前
SensorManager开发参考
android·sensormanager