Android 使用NDK R21编译ffmpeg

本文介绍了在macOS环境下,使用NDK21编译ffmpeg遇到的问题,包括头文件找不到和编译工具未找到。作者通过更换工具链为llvm成功解决了问题,并提供了详细的编译脚本。此外,文章还给出了为ExoPlayer编译ffmpeg的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

编译ffmpeg是学习ffmpeg的第一步,本篇博客的环境是mac os 上 NDK21 版本编译ffmpeg。之所以写这篇博客,主要是因为去年编译的时候一切顺利进行,而今年电脑CPU烧了(使用电脑设备要特别小心电量问题,电量太低容易造成cpu发热)之后,所有数据都没了,所以都是新环境,和去年一样的脚本,今年编译却失败了。

注意:本文中b4 中的b代表6,不然发不出去,一直提示敏感词

二、失败原因

失败是成功之母,造成编译失败的原因是,所选的sysroot和toolchains出了问题

工具链选择了:

/Users/${USER}/Library/Android/sdk/ndk/21.0.6113669/toolchains/arm-linux-androideabi-4.9,

sysroot选择了:

/Users/${USER}/Library/Android/sdk/ndk/21.0.6113669/sysroot

现象是:

【1】部分头文件找不到,连ndk 核心jni文件也找不到

【2】clang、clang++找不到

以上问题莫名其妙,希望有了解的可以指教一下

三、成功方案

成功方案是参考网上博客的,使用了llvm,发现成功了。

#!/bin/bash

NDK=/Users/${USER}/Library/Android/sdk/ndk/21.0.6113669
TOOLCHAIN_ROOT_DIR=darwin-x86_b4
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$TOOLCHAIN_ROOT_DIR/
API=18

#要编译的ffmpeg内容方法
function build_android {

  make clean
  echo "Compiling FFmpeg for $CPU"

	./configure \
    --prefix=$PREFIX \
    --cross-prefix=$CROSS_PREFIX \
    --target-os=android \
    --arch=$ARCH \
    --cpu=$CPU \
    --cc=$CC  \
    --cxx=$CXX  \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    --enable-gpl  \
    --enable-shared \
    --enable-runtime-cpudetect \
    --enable-small  \
    --enable-cross-compile  \
    --enable-asm  \
    --enable-neon \
    --enable-jni  \
    --enable-mediacodec \
    --enable-h2b4_mediacodec  \
    --enable-hwaccels_mediacodec  \
    --disable-debug \
    --disable-hwaccels \
    --disable-postproc \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --disable-avdevice \
    --disable-stripping \
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值