【FFmepg】Clang编译ffmpeg android库

Android新版的NDK移除GCC的编译,改为CLANG,FFmpeg的编译脚本也需要相应修改。以下脚本实测通过NDK20没问题。与GCC编译的脚本相比,主要修改点在几个地方:
1.TOOLCHAIN的路径变化,这是最重要的,从gcc的$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64修改到现地址
2.添加了cc和cxx,指定为clang编译,至于API的支持版本网上有,不要太低都能支持的
3.OPTIMIZE_CFLAGS里面-DBIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD宏的目的是解决一些系统函数编译时提示mismatch,千万不要删除
4.可以修改的地方是disable和enable的各种功能,根据自己项目实际开发需要对库进行缩减
5.ARCH和CPU也是根据自己项目进行修改,不全部列举
【提个问】NDK20b和NDK14b编译出来的ffmpeg库在工程设置为NDK14的项目都可以正常运作,当工程的NDK设为20的时候,ffmpeg解码同样的音频流会出现两种格式?

#!/bin/bash

export NDK=/home/Android/android-ndk-r20b
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64/
API=21

#armv7-a
ARCH=arm
CPU=armv7-a
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU -DBIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD"

    echo "Compiling FFmpeg for $CPU"
    ./configure \
    --prefix=$PREFIX \
    --disable-asm \
    --enable-neon \
    --enable-hwaccels \
    --enable-shared \
    --enable-jni \
    --enable-mediacodec \
    --enable-decoders \
    --disable-encoders \
    --enable-postproc\
    --enable-demuxers \
    --enable-muxers \
    --enable-parsers \
    --enable-protocols \
    --enable-decoder=h264_mediacodec \
    --enable-hwaccel=h264_mediacodec \
    --enable-gpl \
    --disable-bsfs \
    --disable-indevs \
    --disable-outdevs \
    --disable-filters \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --enable-avdevice \
    --disable-symver \
    --disable-ffserver \
    --cross-prefix=$CROSS_PREFIX \
    --target-os=android \
    --arch=$ARCH \
    --cpu=$CPU \
    --cc=$CC \
    --cxx=$CXX \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4
make install
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容