2012-01-11 2 views
10

Я пытаюсь построить FFMPEG с libx264 для Android.Build FFMPEG с x264 для Android

Я могу создать и использовать FFMPEG для Android, но я понял, что мне нужна возможность кодирования, поэтому я пытаюсь построить FFMPEG с x264.

Я использую этот учебник, чтобы построить FFmpeg для Android http://www.roman10.net/how-to-build-ffmpeg-for-android/

При попытке построить FFMPEG я получаю сообщение об ошибке:

"ERROR: libx264 not found"

И в моем журнале он говорит:

"/usr/local/lib/libx264.a: could not read symbols: Archive has no index; run ranlib to add one..."

У меня есть последние версии как FFMPEG, так и x264. Я понимаю, что FFMPEG ищет заголовок и библиотеки в USR/Lib и USR/включать, поэтому для того, чтобы сделать его найти x264 Я использую CFLAGS и LDFLAGS:

  • --extra-CFLAGS = "-I/USR/местные/включить «
  • --extra-LDFLAGS =» -L/USR/местные/Библиотека "

Я попытался здание x264 с множеством различных вариантов, что другие люди в интернете говорят, что мне нужно. например. --enable-shared, --enable-static, --disable-pthreads и т. д. Некоторые форумы говорят, что разрешите это, другие говорят, что не отключите это.

Любая помощь будет высоко ценится, Благодаря

EDIT:

Если я строю FFmpeg с простейшими командами включить libx264 то это работает. т.е.

./configure --enable-gpl --enable-libx264 --extra-cflags="-I/usr/local/include" --extra-ldflags="-L/usr/local/lib" --enable-static --enable-shared 

Однако мне это нужно для работы на Android. Сценарий я использую:

NDK=~/Desktop/android-ndk-r7 
PLATFORM=$NDK/platforms/android-8/arch-arm/ 
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86 
function build_one 
{ 
./configure --target-os=linux \ 
    --prefix=$PREFIX \ 
    --enable-cross-compile \ 
    --enable-shared \ 
    --enable-static \ 
    --extra-libs="-lgcc" \ 
    --arch=arm \ 
    --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \ 
    --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \ 
    --nm=$PREBUILT/bin/arm-linux-androideabi-nm \ 
    --sysroot=$PLATFORM \ 
    --extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS -I/usr/local/include" \ 
    --extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L $PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog -L/usr/local/lib " \ 
    --enable-gpl \ 
    --enable-libx264 \ 
    --disable-everything \ 
    --enable-demuxer=mov \ 
    --enable-demuxer=h264 \ 
    --disable-ffplay \ 
    --enable-protocol=file \ 
    --enable-avformat \ 
    --enable-avcodec \ 
    --enable-decoder=rawvideo \ 
    --enable-decoder=mjpeg \ 
    --enable-decoder=h263 \ 
    --enable-decoder=mpeg4 \ 
    --enable-decoder=h264 \ 
    --enable-encoder=mjpeg \ 
    --enable-encoder=h263 \ 
    --enable-encoder=mpeg4 \ 
    --enable-encoder=h264 \ 
    --enable-parser=h264 \ 
    --disable-network \ 
    --enable-zlib \ 
    --disable-avfilter \ 
    --disable-avdevice \ 
    $ADDITIONAL_CONFIGURE_FLAG 

make clean 
make -j4 install 
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o 
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname libffmpeg.so -shared -nostdlib -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a 
} 

CPU=armv7-a 
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU " 
PREFIX=./android/$CPU 
ADDITIONAL_CONFIGURE_FLAG= 
build_one 

Я предполагаю, что некоторые опции в моей команде конфигурирования конфликтует позволяет libx264

Примечание: Если удалить --enable-libx264, то он работает

+0

Если я построить как x264 и FFmpeg с повреждают статическую и --enable-совместно, то я все еще получаю ту же ошибку, но на этот раз в моем журнале него нет более длинный говорит: «... не мог читать символы ...», но вместо этого он говорит «не могу найти -lx264 ...» – Kage

+0

Как вы установили x264? Вы установили его, загрузив исходный код и выполнив «./configure», «make», «make install», или вы сделали что-то еще? Кроме того, что такое ваша система сборки - * nix или Windows (с cygwin/msys)? – sashoalm

+0

Я загрузил источник и использовал .configure, make, make install Im на mac (10.7) – Kage

ответ

3

У меня такая же проблема. Но после понижения NDK до версии 5c он работает, как описано halfninja. (ubuntu 64 бит). кажется, есть некоторые изменения в инструментарии, от 5 до 7.

[email protected]:/tmp/android-ffmpeg-x264/Project/jni$ ndk-build 
Compile thumb : ffmpeg <= ffmpeg.c 
Compile thumb : ffmpeg <= cmdutils.c 
Executable  : ffmpeg 
Install  : ffmpeg => libs/armeabi/ffmpeg 
Compile thumb : videokit <= uk_co_halfninja_videokit_Videokit.c 
Compile thumb : videokit <= ffmpeg.c 
Compile thumb : videokit <= cmdutils.c 
SharedLibrary : libvideokit.so 
Install  : libvideokit.so => libs/armeabi/libvideokit.so 
+0

Как я могу использовать это для запуска команд ffmpeg в android? Должен ли я использовать параметр «добавить встроенную поддержку» в eclipse для использования этих библиотек? –

1

Я обнаружил --enable-статический параметр не имеет никакого влияния на FFmpeg, связывающее поведение для libx264. Мне удалось построить копию FFmpeg с libx264 включены статически путем редактирования config.mak после того как я запустить ./configure

  • сборки x264 из источника в другой каталог
  • Добавить libx264.a в EXTRALIBS линии в config.mak
  • Удалить -lx264 из строки EXTRALIBS в config.Мак

Перед

EXTRALIBS=-ldl -lX11 -lx264 etc. 

После

EXTRALIBS=/home/adam/x264sourcebuild/libx264.a -ldl -lX11 etc. 
3

Исходный код FFmpeg, кажется, обновляется, и я мог бы составить FFmpeg с x264 для Android NDK в следующем.

1 Скачать в halfninja Андроид-FFmpeg-x264 мерзавец файл из https://github.com/halfninja/android-ffmpeg-x264

2 В "halfninja-андроида-FFmpeg-x264-fe12be0/Проект/JNI" директории, изменять "configure_ffmpeg.sh" связать «libgcc .a "для решения проблемы, которая не может решить" __aeabi_f2uiz ".

./configure $DEBUG_FLAG --enable-cross-compile \ 
--arch=arm5te \ 
--enable-armv5te \ 
--target-os=linux \ 
--disable-stripping \ 
--prefix=../output \ 
--disable-neon \ 
--enable-version3 \ 
--disable-shared \ 
--enable-static \ 
--enable-gpl \ 
--enable-memalign-hack \ 
--cc=arm-linux-androideabi-gcc \ 
--ld=arm-linux-androideabi-ld \ 
--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -I../x264 -Ivideokit" \ 
$featureflags \ 
--disable-ffmpeg \ 
--disable-ffplay \ 
--disable-ffprobe \ 
--disable-ffserver \ 
--disable-network \ 
--enable-filter=buffer \ 
--enable-filter=buffersink \ 
--disable-demuxer=v4l \ 
--disable-demuxer=v4l2 \ 
--disable-indev=v4l \ 
--disable-indev=v4l2 \ 
--extra-ldflags="-L../x264 -L../toolchain/lib/gcc/arm-linux-androideabi/4.4.3" \ 
--extra-libs="-lgcc" 

3 Измените «Android.mk», чтобы связать новую библиотеку «libswresample.a».

FFMPEG_LIBS := $(addprefix ffmpeg/, \ 
libavdevice/libavdevice.a \ 
libavformat/libavformat.a \ 
libavcodec/libavcodec.a \ 
libavfilter/libavfilter.a \ 
libswscale/libswscale.a \ 
libavutil/libavutil.a \ 
libswresample/libswresample.a \ 
libpostproc/libpostproc.a) 

4 Заменить ffmpeg.c и cmdutils.c в каталоге videokit с единицами в каталоге FFmpeg.

5 Выполните процедуру, описанную в README.textile.

+0

Как я могу использовать это для запуска команд ffmpeg в android? Должен ли я использовать параметр «добавить собственную поддержку» в eclipse для использования этих библиотек? –

+0

не работает для меня, какой NDK вы используете? – Guy

2

Это мои рабочие флаги:

x264 (недавний стабильный):

./configure --cross-prefix=arm-linux-androideabi- \ 
--enable-pic \ 
--enable-static \ 
--disable-cli \ 
--disable-asm \ 
--host=arm-linux 

FFmpeg (выпуск/0,10):

./configure --enable-cross-compile \ 
--arch=arm5te \ 
--enable-armv5te \ 
--target-os=linux \ 
--disable-stripping \ 
--prefix=../output \ 
--disable-neon \ 
--enable-version3 \ 
--disable-shared \ 
--enable-static \ 
--enable-gpl \ 
--enable-memalign-hack \ 
--cc=arm-linux-androideabi-gcc \ 
--ld=arm-linux-androideabi-gcc \ 
--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated" \ 
--disable-everything \ 
--enable-decoder=h264 \ 
--enable-demuxer=mov \ 
--enable-muxer=mp4 \ 
--enable-encoder=libx264 \ 
--enable-libx264 \ 
--enable-protocol=file \ 
--enable-decoder=aac \ 
--enable-encoder=aac \ 
--disable-ffmpeg \ 
--disable-ffplay \ 
--disable-ffprobe \ 
--disable-ffserver \ 
--disable-network \ 
--enable-filter=buffer \ 
--enable-filter=buffersink \ 
--enable-filter=scale \ 
--disable-demuxer=v4l \ 
--disable-demuxer=v4l2 \ 
--disable-indev=v4l \ 
--disable-indev=v4l2 \ 
--extra-cflags="-I../x264" \ 
--extra-ldflags="-L../x264" \ 
--extra-libs="-lgcc" 

Очевидно, вам придется корректировать пути ,

2

Я соединил систему Android сборки для FFmpeg + x264 здесь: https://github.com/guardianproject/android-ffmpeg

Мы работаем на некоторой обертке Java тоже для запуска, но это на самом деле не использовать еще.

+0

слишком плохо, что это только для Debian/Ubuntu, а как насчет mac? – shem

+0

Построение на Mac OS X и других должно быть возможным, исправления приветствуются :) мы просто находим, что намного проще запускать собственные сборки Android на Debian/Ubuntu, чем любая другая платформа, включая другие дистрибутивы GNU/Linux. –

+0

Не удалось скомпилировать его на Mac, возможно, потому, что lib init вы должны делать раньше. – shem

1

Я встретил ту же проблему раньше, и я несколько раз пытался выяснить причину:

Вы должны убедиться, что x264 и FFmpeg используют так же, как для компиляции. например: с помощью Android NDK. Использование того же gcc-компилятора.

Таким образом, вы не можете скомпилировать ffmpeg с помощью этой команды: "- cross-prefix = $ PREBUILT/darwin-x86_64/bin/arm-linux-androideabi-", но скомпилируйте x264 без этого. Вот мой x264 компиляции сценария:

./configure --prefix=$PREFIX \ 
--enable-static \ 
--enable-pic \ 
--disable-asm \ 
--disable-cli \ 
--host=arm-linux \ 
--cross-prefix=$PREBUILT/darwin-x86_64/bin/arm-linux-androideabi- \ 
--sysroot=$PLATFORM 

make 
sudo make install 
sudo ldconfig 

 Смежные вопросы

  • Нет связанных вопросов^_^