当前位置: 首页 > news >正文

Ubuntu虚拟机NDK编译ffmpeg

目录

  • 一、ffmpeg源码下载
    • 1、安装git(用于下载ffmpeg源码)
    • 2、创建源码目录,下载ffmpeg源码
  • 二、下载ubuntu对应的NDK,并解压到opt下
    • 1、下载并解压
    • 2、配置 ~/.bashrc
  • 三、源码编译、
    • 1、创建编译脚本
    • 2、脚本文件内容
    • 3、设置可执行权限并运行
    • 4、编译的结果在源码根目录下的android文件夹下
  • 四、编译过程中遇到的问题
    • 1、/opt/android-ndk-r25c/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang not found
    • 2、aarch64-linux-android21-nm not found
    • 3、aarch64-linux-android21-strip not found

一、ffmpeg源码下载

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

sudo apt update
sudo apt install git

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

mkdir ffmpeg_src
cd ffmpeg_src
git clone https://github.com/FFmpeg/FFmpeg.git

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

1、下载并解压

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

2、配置 ~/.bashrc

export ANDROID_NDK_HOME=/opt/android-ndk-r21e
export PATH=$PATH:$ANDROID_NDK_HOME
source ~/.bashrc

三、源码编译、

1、创建编译脚本

touch build_android.sh
vim build_android.sh

2、脚本文件内容

#设置 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、设置可执行权限并运行

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

相关文章:

  • 【Java】理解字符串拼接与数值运算的优先级
  • 解压包格式7z怎么解压?8种方法(Win/Mac/手机/网页端)
  • C++核心指导原则: 哲学部分
  • Deepseek-R1推理模型API接入调用指南 ChatGPT Web Midjourney Proxy 开源项目接入Deepseek教程
  • Linux 信号量
  • Python的那些事第二十四篇:Tornado:异步网络编程的“风火轮”
  • 【实战项目】BP神经网络识别人脸朝向----MATLAB实现
  • 蓝桥杯平方差(打表)
  • React创建项目实用教程
  • 使用DeepSeek建立一个智能聊天机器人0.11
  • 执行pnpm run dev报错:node:events:491 throw er; // Unhandled ‘error‘ event的解决方案
  • leetcode - hot100 - python - 专题一:哈希
  • 基于STM32、HAL库、MB85RC16PNF(I2C接口)驱动程序设计
  • python实现jaccard系数得出两个集合的相似度
  • deepseek-r1不同参数量的模型本地私有化部署,需要的硬件资源最低配置
  • [vs2017][qt]MSB4019 未找到导入的项目QtMsBuild\Qt.prop
  • Linux:Makefile和缓冲区的基本概念
  • pnpm vs npm
  • 【C/C++】后缀表达式 蓝桥杯/ACM备赛
  • elabradio入门第二讲——BPSK数字调制与解调(插值、升余弦滤波、速率匹配、符号同步)
  • 上海“生育友好岗”已让4000余人受益,今年将推产假社保补贴政策
  • 准85后青海海北州副州长、州公安局局长李贤荣赴山东临沂挂职
  • 我国首个核电工业操作系统发布,将在华龙一号新机组全面应用
  • 第一集丨《无尽的尽头》值得关注,《榜上佳婿》平平无奇
  • 新剧|《淮水竹亭》明开播:前作扑街,本作能否改命
  • 辽宁省信访局副局长于江调任辽宁省监狱管理局局长