【问题标题】:Compiling ffmpeg for android on Mac在 Mac 上为 android 编译 ffmpeg
【发布时间】:2020-07-06 23:54:05
【问题描述】:

我尝试在 Mac 上为 android 编译 ffmpeg,但它对我不起作用。

#!/bin/bash
NDK=/Users/user/Library/Android/sdk/ndk-bundle
SYSROOT=$NDK/platforms/android-18/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64

function build_one
{
    ./configure \
    --prefix=$PREFIX \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-network \
    --disable-filters \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --target-os=linux \
    --arch=arm \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG

    make clean all
    make
    make install
}

CPU=arm
PREFIX=$(pwd)/android/$CPU 
ADDI_CFLAGS="-marm"

build_one

我也通过chmod +x build_script.sh授予执行权限

我尝试了 ffmpeg 4.14.0.3 但两者都不起作用并且错误原因相同。

我也试过android-21android-18

test_cpp_condition stddef.h defined __ARM_ARCH_4__ || defined __TARGET_ARCH_4
test_cpp
BEGIN /tmp/ffconf.bgSdFwkD/test.c
    1   #include <stddef.h>
    2   #if !(defined __ARM_ARCH_4__ || defined __TARGET_ARCH_4)
    3   #error "unsatisfied condition: defined __ARM_ARCH_4__ || defined __TARGET_ARCH_4"
    4   #endif
END /tmp/ffconf.bgSdFwkD/test.c
/Users/user/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/Users/user/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm/ -Os -fpic -marm -E -o /tmp/ffconf.bgSdFwkD/test.o /tmp/ffconf.bgSdFwkD/test.c
/tmp/ffconf.bgSdFwkD/test.c:3:2: error: "unsatisfied condition: defined __ARM_ARCH_4__ || defined __TARGET_ARCH_4"
#error "unsatisfied condition: defined __ARM_ARCH_4__ || defined __TARGET_ARCH_4"
 ^
1 error generated.
test_cpp_condition stddef.h defined __ARM_ARCH_4T__ || defined __TARGET_ARCH_4T
test_cpp
BEGIN /tmp/ffconf.bgSdFwkD/test.c
    1   #include <stddef.h>
    2   #if !(defined __ARM_ARCH_4T__ || defined __TARGET_ARCH_4T)
    3   #error "unsatisfied condition: defined __ARM_ARCH_4T__ || defined __TARGET_ARCH_4T"
    4   #endif
END /tmp/ffconf.bgSdFwkD/test.c
/Users/user/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/Users/user/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm/ -Os -fpic -marm -E -o /tmp/ffconf.bgSdFwkD/test.o /tmp/ffconf.bgSdFwkD/test.c
test_ld cc
test_cc
BEGIN /tmp/ffconf.bgSdFwkD/test.c
    1   int main(void){ return 0; }
END /tmp/ffconf.bgSdFwkD/test.c
/Users/user/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/Users/user/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm/ -Os -fpic -marm -march=armv4t -c -o /tmp/ffconf.bgSdFwkD/test.o /tmp/ffconf.bgSdFwkD/test.c
/Users/user/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/Users/user/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm/ -march=armv4t -o /tmp/ffconf.bgSdFwkD/test /tmp/ffconf.bgSdFwkD/test.o
ld: unknown option: --sysroot=/Users/user/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm/
clang: error: linker command failed with exit code 1 (use -v to see invocation)
C compiler test failed.

我是否需要额外安装任何工具/应用程序或库才能进行编译?我很困惑....(这个问题可能重复,但没有一个解决方案对我有用)

编辑澄清我的系统环境。

  • Mac OS X High Sierra (10.13.6)
  • Android NDK (18.1.5063045)
  • Android SDK 工具和 SDK 构建工具
  • CMake

编辑我也试过ffmpeg版本3.3.9,但它也不起作用。

【问题讨论】:

  • 也许你应该使用 NDK 自带的 cmake
  • @shizhen 可以提供更多信息吗?我是 SDK 管理器中 NDK 和 android :O (EDIT) 的新手,已经安装了 CMake。

标签: android macos ffmpeg


【解决方案1】:

我是通过Android Studio安装NDK的,我认为是问题所在,所以我手动下载了Android NDK,现在我可以配置和运行makefile了。

等等!还没做完。当我使用最新的稳定 NDK (r16b) 运行 makefile 时,它​​显示:
./libavutil/common.h:33:19: fatal error: errno.h: No such file or directory

根据this document,所以我尝试使用NDK r15c,它终于对我有用了。

总结一下我是如何解决这个问题的:手动安装 NDK r15c 并且不要忘记更新你的 shell 脚本文件!

希望对您有所帮助!

【讨论】:

    【解决方案2】:

    您可以使用包装器https://github.com/WritingMinds/ffmpeg-android 如果您想使用大部分命令。它会增加apk的大小。

    我也尝试编译它,经过几次尝试,我编译了自己的。但也很难整合。我使用下面的教程来编译它。

    但我只是想告诉你,如果你不考虑 apk 的大小,请使用 FFmpeg 包装器。在自己编译的 FFmpeg 中没有显着的性能提升。使用您想要的上述包装器。它运作良好。如果你更热衷于编译和集成你自己的 FFmpeg,试试上面的教程。

    【讨论】:

    • 感谢您的回答。恐怕但apk的大小对我来说很重要,所以我不能使用包装器。您提供的教程列表也是我之前阅读/尝试过的。我不知道为什么这对我不起作用。 . .
    猜你喜欢
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2017-09-15
    • 1970-01-01
    相关资源
    最近更新 更多