2017-10-20 140 views
1

我想在OSX 10.12.4上爲Android編譯ffmpeg。在OSX上爲Android編譯ffmpeg

下面是我遵循的步驟:

1°)編譯pkg配置

here從下載源。在pkg-config文件夾中提取& & cd。

export DST=/a/path/on/my/computer 

./configure --with-internal-glib --prefix=$DST --exec-prefix=$DST 
make -j2 
make install 

export PATH=$PATH:$DST/bin 

2°)編譯FFMPEG

here下載源。在ffmpeg文件夾中提取& & cd。

export NDK=/path/to/android-ndk-r15c 
export PLATFORM_VERSION=android-26 
export ARCH=arm 
export PLATFORM=$NDK/platforms/$PLATFORM_VERSION/arch-$ARCH 
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64 

export PREFIX=$(pwd)/android/$ARCH 

export ADDI_CFLAGS="-Os -fpic -marm" 
export ADDI_CONFIGURE_FLAG="" 
export ADDI_LDFLAGS="" 

./configure \ 
    --prefix=$PREFIX \ 
    --enable-shared \ 
    --disable-static \ 
    --disable-doc \ 
    --disable-ffmpeg \ 
    --disable-ffplay \ 
    --disable-ffprobe \ 
    --disable-ffserver \ 
    --disable-symver \ 
    --disable-avdevice \ 
    \ 
    --pkg-config=pkg-config \ 
    \ 
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ 
    --target-os=linux \ 
    --arch=$ARCH \ 
    --enable-cross-compile \ 
    --sysroot=$PLATFORM \ 
    --extra-cflags="$ADDI_CFLAGS" \ 
    --extra-ldflags="$ADDI_LDFLAGS" \ 
    \ 
    $ADDI_CONFIGURE_FLAG 

make -j2 

製作失敗,出現以下錯誤:

AR libavfilter/libavfilter.a 
AR libavformat/libavformat.a 
CC libavcodec/aaccoder.o 
In file included from /Users/Tim/Library/Android/android-ndk-r15c/platforms/android-26/arch-arm/usr/include/asm/termbits.h:19:0, 
from /Users/Tim/Library/Android/android-ndk-r15c/platforms/android-26/arch-arm/usr/include/asm-generic/termios.h:21, 
from /Users/Tim/Library/Android/android-ndk-r15c/platforms/android-26/arch-arm/usr/include/asm/termios.h:19, 
from /Users/Tim/Library/Android/android-ndk-r15c/platforms/android-26/arch-arm/usr/include/linux/termios.h:22, 
from /Users/Tim/Library/Android/android-ndk-r15c/platforms/android-26/arch-arm/usr/include/sys/ioctl.h:37, 
from ./libavutil/timer.h:36, 
from ./libavutil/internal.h:42, 
from ./libavutil/common.h:467, 
from libavcodec/mathops.h:27, 
from libavcodec/aaccoder.c:38: 
libavcodec/aaccoder.c: In function 'search_for_ms': 
libavcodec/aaccoder.c:803:25: error: expected identifier or '(' before numeric constant 
int B0 = 0, B1 = 0; 
^ 
libavcodec/aaccoder.c:865:28: error: lvalue required as left operand of assignment 
B0 += b1+b2; 
^ 
libavcodec/aaccoder.c:866:25: error: 'B1' undeclared (first use in this function) 
B1 += b3+b4; 
^ 
libavcodec/aaccoder.c:866:25: note: each undeclared identifier is reported only once for each function it appears in 
make: *** [libavcodec/aaccoder.o] Error 1 
make: *** Waiting for unfinished jobs.... 

我能夠在源頭上A0 & A1改名B0 & B1變量來修復錯誤(不知道爲什麼它修復問題),但是它在別的地方失敗了。我猜想我的配置有些問題,我寧願避免修補源代碼。

所以問題是:

  • 沒有人知道什麼是錯在這裏?我需要給gcc一些參數嗎?
  • 是--target-os = linux正確,還是應該是--target-os = darwin? target-os是編譯完成的操作系統,還是執行ffmpeg的目標?通過使用darwin,我可以使用--enable-static進行編譯,但不能使用--enable-shared(我想要)。

注意:我需要自己編譯它,因爲我只想要支持HTTPS的arm版本。因此我不能使用現有的內置版本。

回答

0

我也遇到這個問題,當我試圖建立ffmpeg 3.4最新版本。我希望你可以嘗試3.3版本,我成功地構建它。 我懷疑最新版本是不穩定的,並有一些錯誤。 順便說一下,你可以採取一些答案通過這篇文章: http://alientechlab.com/how-to-build-ffmpeg-for-android/

+0

看起來我忘了回答我自己的問題,所以我會接受你的。我做了同樣的事情,並採取了舊版本,這是工作。這麼多時間爲了這一點而輸了! –