2014-09-02 15 views
9

Próbowałem skompilować FFMPEG, aby móc go używać z moją aplikacją Android z poleceniami. Rezultatem powinien być 1 plik statyczny "ffmpeg", który nie jest zależny od pakietu. Nie .to pliki.Skompiluj FFMPEG do użycia linii poleceń

Udało mi się skompilować go z GuardianProject i wszystko działa, ale źródło było zbyt stare i brakuje mu potrzebnych opcji. Używam najnowszego Ubuntu na VirtualBox, wszystkie niezbędne elementy są instalowane i aktualizowane (gawk, yasm, aptitude itp.).

Istnieje wiele przykładów w Internecie. Oto problemy, których doświadczyłem przy każdej z opcji, które wypróbowałem. Uprzejmie pomoc z jednej z następujących błędów:

  1. Guardian project - udało mi się go skompilować i pobrać plik ffmpeg ale używa starej wersji ffmpeg, który nie zawiera opcję "-movFlags faststart". Próbowałem rzucić nowe ffmpeg (2.3.3) tam, ale po prostu wyrzuca błąd. (Uruchomiłem inicjalizację i aktualizację git submodule)

  2. JayH5 - Bardziej ogólny plik kompilacji, który powinien działać z każdym plikiem ffmpeg. Zaktualizowałem skrypt budujący do pracy z najnowszym NDK i wygląda na to, że działa, ale nie zawodzi /home/dor/Desktop/ndk/android-ndk-r10/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/arm-linux-androideabi-pkg-config not found, library detection may fail. Czytałem o tym i wydaje się, że wymaga hack, którego nie rozumiem, jak zaimplementować.

  3. Trovao - jest to bardzo ładny projekt i skrypt kompilacji nawet pobiera najnowsze ffmpeg i X264 źródeł, a ja nawet udało się kompilowanie go do plików FFmpeg i X264, ale kiedy go używać, otrzymuję ten błąd: could not load library "libx264.so.142 co jest dziwne, ponieważ jest tam x264, a cała idea tego projektu polega na anulowaniu potrzeby plików .so.

Byłbym wdzięczny za pomoc w ustaleniu, jak rozwiązać jeden z problemów. Wolę za pomocą JayH5 zbudować skrypt, jak się wydaje najbardziej proste tam ...

JayH5 zbudować plik:

#!/bin/bash 

# set the base path to your Android NDK (or export NDK to environment) 

if [[ "x$NDK_BASE" == "x" ]]; then 
    NDK_BASE=/opt/android-ndk 
    echo "No NDK_BASE set, using $NDK_BASE" 
fi 

NDK_PLATFORM_VERSION=14 
NDK_ABI=arm 
NDK_COMPILER_VERSION=4.8 
NDK_SYSROOT=$NDK_BASE/platforms/android-$NDK_PLATFORM_VERSION/arch-$NDK_ABI 
NDK_UNAME=`uname -s | tr '[A-Z]' '[a-z]'` # Convert Linux -> linux 
HOST=$NDK_ABI-linux-androideabi 
NDK_TOOLCHAIN_BASE=$NDK_BASE/toolchains/$HOST-$NDK_COMPILER_VERSION/prebuilt/$NDK_UNAME-x86 
CC="$NDK_TOOLCHAIN_BASE/bin/$HOST-gcc --sysroot=$NDK_SYSROOT" 
LD=$NDK_TOOLCHAIN_BASE/bin/$HOST-ld 

BUILD_PATH=build/ffmpeg 

./configure \ 
$DEBUG_FLAG \ 
--arch=arm \ 
--target-os=linux \ 
--enable-runtime-cpudetect \ 
--enable-pic \ 
--disable-shared \ 
--enable-static \ 
--cross-prefix=$NDK_TOOLCHAIN_BASE/bin/$NDK_ABI-linux-androideabi- \ 
--sysroot="$NDK_SYSROOT" \ 
--extra-cflags="-march=armv7-a -mfloat-abi=softfp -fPIC -DANDROID" \ 
--extra-ldflags="" \ 
--enable-ffmpeg \ 
--disable-ffplay \ 
--disable-ffprobe \ 
--disable-ffserver \ 
--disable-network \ 

Odpowiedz

4

Po 2 dniach kompilacji plików FFmpeg, że po prostu nie działa, W końcu mi się udało!

W powyższym pliku build.sh, po prostu dodaj te 4 linie i dół, aby uniknąć błędu prebuilt/linux-x86/bin/arm-linux-androideabi-pkg-config not found, library detection may fail.

dodawania do pliku:

$ADDITIONAL_CONFIGURE_FLAG 
make clean 
make 
make install 

Nie zapomnij chmod 775 ffmpeg pliku po zakończeniu procesu. Naprawdę mam nadzieję, że to pomoże innym!

Jeśli potrzebujesz FFMPEG z obsługą libX264, użyj tego projektu - po prostu idealny. https://github.com/hiteshsondhi88/ffmpeg-android/

+0

Bez zmian! Dodałem '$ ADDITIONAL_CONFIGURE_FLAG' w opcjach' configure'. Dodałem go przed konfiguracją ... bez żadnych zmian :( –

+0

Jaka jest wartość $ ADDITIONAL_CONFIGURE_FLAG? –