android - 我无法从 FFMPEG 为 android 构建 .so 文件

标签 android ffmpeg android-ndk ndk-build .so

我用不同版本的 ffmpeg 尝试了很多次,但最终都失败了。我不知道他们如何编写 .sh 文件来配置不同的工具。这是我尝试过的一些 .sh 文件,但都失败了。要么只显示android/share文件夹而不是

  • 安卓/包括
  • 安卓/库
  • 安卓/分享

  • 或者
    我最终会出错,例如 no file or folder exist ,ETC
    我会分享build_arm64-v8a下面不同版本的文件
    版本 1
    #!/bin/bash
    export NDK=/media/sf_sharing/android-ndk
    export HOST_TAG=linux-x86_64 # adjust to your building host
    export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$HOST_TAG
    
    export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang
    export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++
    
    function build_arm64-v8a
    {
      ./configure \
      --prefix=./android/arm64-v8a \
      --enable-static \
      --enable-pic \
      --disable-asm \
      --disable-opencl \
      --disable-cli \
      --host=aarch64-linux \
      --cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android- \
      --sysroot=$TOOLCHAIN/sysroot \
    
      make clean
      make
      make install
    }
    
    build_arm64-v8a
    echo build_arm64-v8a finished
    
    版本 2
    #!/bin/bash
    
    TOOLCHAIN=/media/sf_sharing/my-android-toolchain64
    CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
    rm -f $(pwd)/compat/strtod.o
    function build_one
    {
    ./configure --prefix=$PREFIX --enable-shared --disable-static --enable-protocol=file --enable-pic --enable-small --disable-programs --disable-doc --disable-symver --target-os=android --enable-cross-compile --cross-prefix=$CROSS_PREFIX --extra-cflags="-Os -fpic $ADDI_CFLAGS" --extra-ldflags="$ADDI_LDFLAGS" --sysroot=$TOOLCHAIN/sysroot $ADDITIONAL_CONFIG_FLAG
    make clean
    make -j2
    make install
    }
    
    CPU=arm64-v8a
    mkdir -p $(pwd)/android/$CPU
    PREFIX=$(pwd)/android/$CPU
    ADDI_CFLAGS="-march=armv8-a"
    ADDI_LDFLAGS="-L$TOOLCHAIN/sysroot/usr/lib"
    ADDITIONAL_CONFIG_FLAG="--arch=aarch64 --enable-yasm"
    build_one
    
    版本 3
    #!/bin/bash
    export NDK=/media/sf_sharing/android-ndk
    export HOST_TAG=linux-x86_64 # adjust to your building host
    export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$HOST_TAG
    
    export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang
    export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++
    
    function build_arm64-v8a
    {
      ./configure \
      --prefix="$HOME/ffmpeg_build" \
      --pkg-config-flags="--static" \
      --extra-cflags="-I$HOME/ffmpeg_build/include" \
      --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
      --extra-libs="-lpthread -lm" \
      --bindir="$HOME/bin" \
      --enable-gpl \
      --enable-gnutls \
      --enable-libaom \
      --enable-libass \
      --enable-libfdk-aac \
      --enable-libfreetype \
      --enable-libmp3lame \
      --enable-libopus \
      --enable-libvorbis \
      --enable-libvpx \
      --enable-libx264 \
      --enable-libx265 \
      --enable-nonfree \
    
      make clean
      make
      make install
    }
    
    build_arm64-v8a
    echo build_arm64-v8a finished
    
    我在用着
  • ffmpeg-snapshot.tar.bz2
  • android-ndk-r21d-linux-x86_64

  • 我在“ndk 21”中唯一知道的是我们需要使用默认工具链(android 文档说)。
    如何创建 .sh 文件来构建 .so 文件以在 android 中使用?

    最佳答案

    我建议使用 --disable-everything 构建最简单的版本,然后从那里构建你的命令。我建立在mac上。我编辑了您的第三次尝试,并使用一个编解码器为 arm64 构建,如下所示:

    #!/bin/bash
    导出 ANDROID_NDK_HOME=${HOME}/Library/Android/android-ndk-r21
    export HOST_TAG=darwin-x86_64 # 适应你的建筑主机
    导出 TOOLCHAIN=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/$HOST_TAG

    功能 build_other
    {
    TARGET_ABI=arm64-v8a
    主机=aarch64-linux-android
    ./configure --disable-everything --disable-doc --disable-programs --disable-shared --enable-cross-compile --arch=aarch64 --target-os=linux --enable-pic\
    --prefix="$HOME/ffmpeg_build"\
    --sysroot=${ANDROID_NDK_HOME}/sysroot\
    --enable-encoder=h261 --enable-decoder=h261\
    --extra-ldflags="-L${ANDROID_NDK_HOME}/platforms/android-29/arch-arm64/usr/lib -lc"\
    --cc=${TOOLCHAIN}/bin/aarch64-linux-android29-clang --ld=${TOOLCHAIN}/bin/aarch64-linux-android-ld --strip=${TOOLCHAIN}/bin/aarch64-linux -android-strip

    打扫干净
    制作
    进行安装
    }

    mkdir $HOME/ffmpeg_build 2>/dev/null
    build_other
    echo build_arm64-v8a 完成

    笔记:
    我建立在mac上,这应该适用于linux。
    另外,不要链接pthread! pthread 在 libc for android 中。

    关于android - 我无法从 FFMPEG 为 android 构建 .so 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62878679/

    相关文章:

    android - 当元数据旋转不正确时如何获取视频旋转角度?

    android - 如何在 mupdf 中生成 cmap_cns.h?

    android - 如何解决 "ERROR: libx264 not found"?

    java - 如果 url 更改,则 Glide 是否有任何选项,然后缓存将被清除,否则加载旧图像?

    android - 服务器和移动应用程序之间的通信

    windows - ffmpeg 录制屏幕并将视频文件以 .mpg 格式保存到磁盘

    c++ - 如果 extern "C"包含与 Qt 库冲突怎么办?

    java - 闹钟服务在手机的省电模式下无法工作

    java - 如何限制每次 session 的广告数量?

    Android NDK C#ifndef 问题