簡體   English   中英

在 OSX 上為 Android 編譯 ffmpeg

[英]Compiling ffmpeg for Android on OSX

我正在嘗試在 OSX 10.12.4 上為 Android 編譯 ffmpeg。

以下是我遵循的步驟:

1°) 編譯 pkg-config

這里下載源代碼。 在 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

這里下載源代碼。 在 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

Make 失敗並出現以下錯誤:

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....

我可以通過將源代碼中的 B0 和 B1 變量重命名為 A0 和 A1 來修復該錯誤(不知道它為什么解決了這個問題),但是它在其他地方失敗了。 我想我的配置有問題,我寧願避免修補源代碼。

所以問題是:

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

注意:我需要自己編譯它,因為我只想要一個支持 HTTPS 的 arm 版本。 因此我不能使用現有的構建版本。

我在構建ffmpeg 3.4最新版本時也遇到了這個問題,希望你能試試3.3版本,我構建成功了。 我懷疑最新版本不穩定並且有一些錯誤。 順便說一句,你可以通過這篇文章來回答: http : //alientechlab.com/how-to-build-ffmpeg-for-android/

FFmpeg 團隊關閉的問題

--target-os=android解決了

./configure \ 
... 
--target-os=android 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM