如何使用 Freetype2 为 Android 构建 FFmpeg

如何使用 Freetype2 为 Android 构建 FFmpeg

在 OSX Yosemite 上,我尝试构建包含 freetype 库的 FFmpeg(我需要它来处理 drawtext 过滤器)。不幸的是,我无法正确配置 ffmpeg,每次尝试都以“未找到 freetype”错误结束。

  1. 构建没有 freetype 的普通 FFmpeg-2.5.3 效果很好(随后教程)
  2. 构建 Freetype-2.5.3 也可以正常工作(随后教程)
  3. 包括额外的库位置,其中内置的 freetype 位于

像这样:

--extra-ldflags="-L$PREFIX/lib" 
--extra-cflags="-I$PREFIX/include -I$PREFIX/include/freetype2"
  1. ./build_android.sh最终ERROR: freetype2 not found

构建android.sh:

#!/bin/bash
NDK=$HOME/Desktop/adt/android-ndk-r10d
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64
function build_one
{
./configure \
 --prefix=$PREFIX \
 --enable-shared \
 --disable-static \
 --enable-libfreetype \
 --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 -I$PREFIX/include"
ADDI_LDFLAGS="-L$PREFIX/lib"
build_one

config.log 的最后三行:

require_libfreetype
false --exists --print-errors freetype2
ERROR: freetype2 not found

提前致谢(抱歉我的英语不好)

PS:我检查了 guardian-project 中的补丁源,发现了以下内容:

# this is a fake pkg-config since ffmpeg requires pkg-config if you want to
# include external libraries like libfreetype or libass.  The Android NDK does
# not provide any kind of pkg-config.

这是否意味着我必须转到 Linux?OSX 上没有安装 pkg-config 吗?

algakzru$ pkg-config --version
0.28

答案1

我让它与 Guardian 项目版本的 ffmpeg build 一起工作(用于命令行输出)。请在此处查看我的 fork:

https://github.com/touchlab/android-ffmpeg

本质上,您需要让 ffmpeg 配置使用 fake-pkg-config,并对其进行修改以查看参数 3,而不是参数 2(在我的 fork 中)。fork 版本的顶部有一些说明。我刚刚运行了一个测试版本,根据该说明,您可以忽略修复 ffmpeg/libavutil/arm/intmath.h 中的注释的部分。只需执行 ffmpeg/configure 更改即可。

最初,ffmpeg/configure 更改是通过 config_ffmpeg.sh 中的补丁完成的,但我完全删除了补丁,并没有制作新的补丁。更新子模块版本后,补丁不再有效。

另外,作为参考,我使用的是 ndk r10c 版本。

从今天起(2015 年 2 月 8 日),ffmpeg、freetype2 和 x264 应该都是 master。我可能最终会将它们固定到一个版本,但它在我的优先级列表中并不是很高,所以...

相关内容