【问题标题】:How to build ffmpeg in Android NDK under WindowsWindows下如何在Android NDK中构建ffmpeg
【发布时间】:2017-01-05 22:07:49
【问题描述】:

我正在尝试在 Windows 下的 Android NDK 中构建 ffmpeg 以放入应用程序但遇到问题。 我找到了有关如何执行此操作的各种指南,但它们都已使用多年且不再有效。

到目前为止,我所做的是安装 NDK 并将最新的 ffmpeg 3.1.2 源代码下载到源文件夹中。我也安装了cygwin。

然后我创建了一个脚本 build_android.sh,其中包含代码(取自另一个指南):

#!/bin/bash
NDK=/cygdrive/c/Android/ndk/android-ndk-r12b
SYSROOT=$NDK/platforms/android-24/arch-arm64/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
function build_one
{
    ./configure \
   --prefix=$PREFIX \
   --disable-shared \
   --enable-static \
   --disable-doc \
   --disable-ffmpeg \
   --disable-ffplay \
   --disable-ffprobe \
   --disable-ffserver \
   --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
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU 
ADDI_CFLAGS="-marm"
build_one

当我运行它时,我得到:

Makefile:198: /tests/Makefile: No such file or directory
make: *** No rule to make target '/tests/Makefile'.  Stop.

有人知道如何在 NDK 中成功构建 ffmpeg 或有任何适用于最新版本的指南吗?

谢谢, 奥利弗

【问题讨论】:

    标签: android ffmpeg


    【解决方案1】:

    “tests”是 ffmpeg 文件夹中的子文件夹。它是构建所必需的,但看起来它丢失了。确保您已拉下整个 ffmpeg 源代码树。

    你的 build_android.sh 在我看来不错。

    【讨论】:

    • 感谢您的回复这实际上是我检查的第一件事,测试子文件夹和 Makefile 都存在于 ffmpeg 源文件夹下,但奇怪的是在构建它时会显示找不到它的消息
    • 我注意到它正在根目录中寻找“测试”。我本来希望它会说“没有规则来制作目标'tests/Makefile'”。您可以编辑“make install”行以包含“--debug=v”开关,并关联一些输出吗?您还可以编辑 ffmpeg/Makefile 的第 198 行以明确指向正确的测试文件夹,直到我们弄清楚为止。
    • 感谢您的帮助 - 我查看了 Makefile 第 198 行 - 该行是: include $(SRC_PATH)/tests/Makefile 所以看起来 SRC_PATH 没有设置。我尝试在 build_android.sh 中设置它,但没有任何影响。你知道我应该怎么设置吗?
    • SRC_PATH 由 ./configure 脚本(来自 build_android.sh)设置。它将它作为输出的第二行(“源路径”)回显到屏幕上。在我看来,“源路径”是“.”。您的 ./configure 输出看起来如何?它有没有抛出任何错误?在某些情况下,如果 ffmpeg 完整路径中有空格,则构建会失败。
    • 我已经设法通过将目录从 /cygdrive/c/ 更改为 c:/ 来非常接近构建它,这似乎可以构建它。我还添加了 --enable-jni 并将目标操作系统更改为 android。但是现在经过一段时间的编译我得到:ffserver.c:在函数'main'中:ffserver.c:4003:5:错误:函数'sigaction'的隐式声明[-Werror =implicit-function-declaration] sigaction(SIGCHLD , &sigact, 0);知道如何解决吗?我可能会考虑禁用 ffserver 组件,因为我认为我不需要它只是为了我想做的事情
    猜你喜欢
    • 2012-06-09
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2017-11-22
    • 2014-10-27
    • 2015-05-01
    相关资源
    最近更新 更多