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

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

下载地址


总结

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

相关推荐
一笑的小酒馆5 小时前
Android在ksp中简单使用Room
android
meimeiqian6 小时前
flutter android端抓包工具
android·flutter
Android技术之家6 小时前
谷歌决定终止开源Android以及对开发者的影响
android·开源
每次的天空8 小时前
Android Jetpack学习总结(源码级理解)
android·学习·android jetpack
木子庆五8 小时前
Android设计模式之代理模式
android·设计模式·代理模式
在雨季等你8 小时前
创业之旅 - 反思 - 整改 - 新的方向 - 诚邀
android
Long_poem8 小时前
【自学笔记】PHP语言基础知识点总览-持续更新
android·笔记·php
fatiaozhang952710 小时前
晶晨S905L3A(B)-安卓9.0-开启ADB和ROOT-支持IPTV6-支持外置游戏系统-支持多种无线芯片-支持救砖-完美通刷线刷固件包
android·游戏·adb·华为·电视盒子·机顶盒rom·魔百盒固件
行墨10 小时前
Kotlin语言的==与===比较操作
android
圣火喵喵教10 小时前
Pixel 8 pro 刷AOSP源码 Debug 详细教程(含救砖)
android