繁体   English   中英

在 Mac 上为 android 编译 ffmpeg

[英]Compiling ffmpeg for android on Mac

我试图在 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)
  • 安卓 NDK (18.1.5063045)
  • Android SDK 工具和 SDK 构建工具
  • 制作

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

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

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

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

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

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

根据这个文档,所以我尝试使用 NDK r15c ,它终于对我r15c

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

希望这有帮助!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM