美文网首页
利用NDK(r20) 编译FFmpeg 4.2.1 Andro

利用NDK(r20) 编译FFmpeg 4.2.1 Andro

作者: 给我一支白沙 | 来源:发表于2019-11-24 22:11 被阅读0次

    FFMpeg编译

    介绍

    编译FFmpeg Android版本太难了,搜了各种民间教程,教程的操作系统、NDK版本、FFmpeg版本都不一样。那如果想整一个最新的版本怎么办呢?今天我就来试试,我的系统是Mac os,也同样适用于Linux,Window系统的话暂时不行

    下载

    1. 下载FFmpeg源码 源码下载
    2. 如果你是用Mac或Linux用户并且安装了AndroidStudio,用AndroidStudio更新NDK即可,不需要重新下载
    3. Windows用户暂时不知道怎么整
    4. 你想重新下载也可以 下载地址

    解压

    tar -xvf ffmpeg-4.2.1.tar.bz2

    开始编译

    1. 修改so文件命名规则

    # 将ffmpeg-4.2.1目录中configure 文件中的:
    # 通过查找关键字即可 就只有这四行
    SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)' 
    LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"' 
    SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)' 
    SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
    
    #替换为:
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
    LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
    SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
    SLIB_INSTALL_LINKS='$(SLIBNAME)'
    

    2. 创建并粘贴编译脚本文件

    1. 将终端切换到ffmpeg-4.2.1目录下,创建build_android.sh
    cd ffmpeg-4.2.1
    touch build_android.sh
    
    1. 粘贴以下内容到build_android.sh并保存
    #!/bin/bash
    NDK=/Users/julian/Library/Android/sdk/ndk-bundle
    HOST_TAG=darwin-x86_64
    #HOST_TAG 的值根据系统修改
    #macOS  darwin-x86_64
    #Linux   linux-x86_64
    #32-bit Windows  windows
    #64-bit Windows  windows-x86_64
    TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$HOST_TAG
    API=21
    
    function build_android
    {
    echo "Compiling FFmpeg for $CPU and prefix is $PREFIX"
    ./configure \
        --prefix=$PREFIX \
        --disable-x86asm \
        --disable-neon \
        --disable-hwaccels \
        --disable-gpl \
        --disable-postproc \
        --enable-shared \
        --enable-jni \
        --disable-mediacodec \
        --disable-decoder=h264_mediacodec \
        --disable-static \
        --disable-doc \
        --disable-ffmpeg \
        --disable-ffplay \
        --disable-ffprobe \
        --disable-avdevice \
        --disable-doc \
        --disable-symver \
        --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 -j2
    # make install
    echo "The Compilation of FFmpeg for $CPU is completed"
    }
    
    
    # arm64-v8a   aarch64-linux-android
    
    # ARCH=arm64
    # CPU=armv8-a
    # TRIPLE=aarch64-linux-android
    # STRIP=aarch64-linux-android
    # OPTIMIZE_CFLAGS="-march=$CPU"
    
    
    # armeabi-v7a armv7a-linux-androideabi
    
    ARCH=arm
    CPU=armv7-a
    TRIPLE=armv7a-linux-androideabi
    STRIP=arm-linux-androideabi
    OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
    
    # # x86 i686-linux-android
    
    # ARCH=x86
    # CPU=x86
    # TRIPLE=i686-linux-android
    # STRIP=i686-linux-android
    # OPTIMIZE_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
    
    # x86-64  x86_64-linux-android
    
    # ARCH=x86_64
    # CPU=x86-64
    # TRIPLE=x86_64-linux-android
    # STRIP=x86_64-linux-android
    # OPTIMIZE_CFLAGS="-march=$CPU -msse4.2 -mpopcnt -m64 -mtune=intel"
    
    CC=$TOOLCHAIN/bin/$TRIPLE$API-clang
    CXX=$TOOLCHAIN/bin/$TRIPLE$API-clang++
    SYSROOT=$NDK/toolchains/llvm/prebuilt/$HOST_TAG/sysroot
    CROSS_PREFIX=$TOOLCHAIN/bin/$STRIP-
    PREFIX=$(pwd)/android/$CPU
    build_android
    
    
    

    3. 配置build_android.sh参数

    1. 配置NDK路径,示例中我配置的是AndroidStudio安装后的bundle

    NDK=/Users/julian/Library/Android/sdk/ndk-bundle

    1. 修改HOST_TAG的配置

    HOST_TAG 的值根据系统修改,由于我的是mac 所以我的HOST_TAG=darwin-x86_64

    电脑操作系统 HOST_TAG 的值
    macOS darwin-x86_64
    Linux linux-x86_64
    32-bit Windows windows
    64-bit Windows windows-x86_64
    1. 选择需要编译的版本 默认为 armv7-a

    一次只能编译一种版本 通过注释和取消注释

    1. 修改build_android.sh权限
    chmod +x build_android.sh
    

    4. 编译

    ./build_android.sh
    

    5. 等待

    相关文章

      网友评论

          本文标题:利用NDK(r20) 编译FFmpeg 4.2.1 Andro

          本文链接:https://www.haomeiwen.com/subject/bcurwctx.html