Ubuntu虚拟机NDK编译ffmpeg

目录

一、ffmpeg源码下载

1、安装git(用于下载ffmpeg源码)

powershell 复制代码
sudo apt update
sudo apt install git

2、创建源码目录,下载ffmpeg源码

powershell 复制代码
mkdir ffmpeg_src
cd ffmpeg_src
git clone https://github.com/FFmpeg/FFmpeg.git

二、下载ubuntu对应的NDK,并解压到opt下

1、下载并解压

powershell 复制代码
https://github.com/android/ndk/wiki/Unsupported-Downloads   // 下载地址
sudo unzip android-ndk-r21e-linux-x86_64.zip -d /opt/

2、配置 ~/.bashrc

powershell 复制代码
export ANDROID_NDK_HOME=/opt/android-ndk-r21e
export PATH=$PATH:$ANDROID_NDK_HOME
source ~/.bashrc

三、源码编译、

1、创建编译脚本

powershell 复制代码
touch build_android.sh
vim build_android.sh

2、脚本文件内容

powershell 复制代码
#设置 NDK 路径
NDK=/opt/android-ndk-r25c
#设置目标平台和架构
API=21
ARCH=arm64
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
SYSROOT=$TOOLCHAIN/sysroot
PREFIX=$(pwd)/android/$ARCH

#配置 FFmpeg
./configure \
    --prefix=$PREFIX \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-programs \
    --disable-avdevice \
    --enable-avfilter \
    --enable-postproc \
    --enable-swresample \
    --enable-swscale \
    --disable-encoders \
    --disable-muxers \
    --disable-filters \
    --enable-jni \
    --enable-mediacodec \
    --cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android$API- \
    --target-os=android \
    --arch=$ARCH \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic" \
    --extra-ldflags=""

#编译并安装
make clean
make -j4
make install

3、设置可执行权限并运行

powershell 复制代码
sudo chmod+x build_android.sh
./build_android.sh

4、编译的结果在源码根目录下的android文件夹下

四、编译过程中遇到的问题

1、/opt/android-ndk-r25c/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang not found

解决办法,进入到toolchains/llvm/prebuilt/linux-x86_64/bin/中看看aarch64-linux-android21-clang是否存在,如果不存在,就找一个存在的版本,并修改build_android.sh 中的API的值

2、aarch64-linux-android21-nm not found

toolchains/llvm/prebuilt/linux-x86_64/bin中已经没有这个工具了,可以用llvm-nm代替。直接把llvm-nm拷贝一份,命名为aarch64-linux-android21-nm

3、aarch64-linux-android21-strip not found

toolchains/llvm/prebuilt/linux-x86_64/bin中已经没有这个工具了,可以用llvm-strip代替。直接把llvm-strip拷贝一份,命名为aarch64-linux-android21-strip

相关推荐
shylyly_3 小时前
Linux-> TCP 编程1
linux·网络·tcp/ip·echo·tcp编程
abcooxj4 小时前
Linux I2C 子系统
linux
无敌最俊朗@4 小时前
Qt 多线程与并发编程详解
linux·开发语言·qt
DrugOne4 小时前
Amber24 安装指南:Ubuntu 22.04 + CUDA 12.4 环境
linux·运维·ubuntu·drugone
至善迎风5 小时前
Ubuntu 24.04 SSH 多端口监听与 ssh.socket 配置详解
linux·ubuntu·ssh
wdfk_prog5 小时前
[Linux]学习笔记系列 -- lib/timerqueue.c Timer Queue Management 高精度定时器的有序数据结构
linux·c语言·数据结构·笔记·单片机·学习·安全
大聪明-PLUS6 小时前
如何从 USB 闪存驱动器安装 Debian Linux
linux·嵌入式·arm·smarc
报错小能手6 小时前
linux学习笔记(18)进程间通讯——共享内存
linux·服务器·前端
第四维度46 小时前
【全志V821_FoxPi】6-2 IMX219 MIPI摄像头适配
linux·ipc·tina·v821·imx219
杜子不疼.6 小时前
【Linux】进程的初步探险:基本概念与基本操作
linux·人工智能·ai