![Как собрать FFmpeg с Freetype2 для Android](https://rvso.com/image/1438147/%D0%9A%D0%B0%D0%BA%20%D1%81%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D1%8C%20FFmpeg%20%D1%81%20Freetype2%20%D0%B4%D0%BB%D1%8F%20Android.png)
На OSX Yosemite я пытаюсь собрать FFmpeg с включенной библиотекой freetype (она мне нужна для фильтра drawtext). К сожалению, я не могу правильно настроить ffmpeg, и каждая попытка заканчивается ошибкой "freetype not found".
- Сборка простого FFmpeg-2.5.3 без freetype работает отлично (следуяэтотруководство)
- Сборка Freetype-2.5.3 также работает нормально (следуетэтотруководство)
- Включены дополнительные места расположения библиотек, где находится встроенный freetype,
так:
--extra-ldflags="-L$PREFIX/lib"
--extra-cflags="-I$PREFIX/include -I$PREFIX/include/freetype2"
./build_android.sh
заканчивается тем, чтоERROR: freetype2 not found
build_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
Последние 3 строки 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? Разве pkg-config не установлен на OSX?
algakzru$ pkg-config --version
0.28
решение1
Я заставил это работать с версией проекта guardian сборки ffmpeg (для вывода командной строки). Смотрите мой форк здесь:
https://github.com/touchlab/android-ffmpeg
По сути, вам нужно заставить ffmpeg configure использовать fake-pkg-config и изменить его так, чтобы он смотрел на param 3 вместо param 2 (который есть в моем форке). В верхней части форкнутой версии есть несколько инструкций. Я только что запустил тестовую сборку, и согласно ей, вы можете проигнорировать часть об исправлении комментариев в ffmpeg/libavutil/arm/intmath.h. Просто внесите изменения в ffmpeg/configure.
Первоначально изменение ffmpeg/configure было сделано с помощью патча в config_ffmpeg.sh, но я полностью удалил патчи и не делал новый. Патчи перестали быть действительными после обновления версий подмодулей.
Также, для справки, я использую версию ndk r10c.
ffmpeg, freetype2 и x264 должны быть master на сегодняшний день (08.02.2015). Возможно, я в конечном итоге прикреплю их к версии, но это не очень высоко в моем списке приоритетов, так что...