Tôi đang cố gắng xây dựng thư viện FFMPEG cho ứng dụng Android của mình bằng NDK. Tôi đã tải về mã nguồn từ trang web của nó và tôi nghĩ rằng tôi xây dựng nó (đó là thử đầu tiên của tôi làm việc với NDK và ffmpeg). Tôi đã tạo một tệp build.sh
mà tôi đang sử dụng để thực thi nó từ dòng lệnh trên Mac OS X. Nhưng tôi có một vài câu hỏi ...Android NDK & FFMPEG xây dựng
Điều đầu tiên là tôi biết mình cần tệp Android.mk để tôi có thể sử dụng thư viện được xây dựng trong ứng dụng của tôi, nhưng tôi không biết làm thế nào để làm điều đó vì những lý do mà tôi đã nói với bạn ở trên. Sau khi tôi chạy build.sh
tôi nhận được android
thư mục với một vài thư mục và một số thư viện. Vì vậy, câu hỏi đầu tiên của tôi là, làm thế nào tôi có thể xây dựng các tập tin Android.mk mà tôi cần ... và có lẽ nếu ai đó có thể giải thích cho tôi lý do tại sao tôi cần nó.
câu hỏi thứ hai của tôi là tôi cần một số thư viện từ ffmpeg để có thể sử dụng chúng từ ứng dụng của tôi, nhưng sau khi xây dựng tôi không thể nhìn thấy chúng trong cây nguồn của tôi. Tôi biết rằng tôi phải kích hoạt chúng trong số build.sh
và tôi nghĩ rằng tôi đã làm, nhưng tôi không thể nhìn thấy chúng. Vì vậy, bất kỳ loại thông tin nào về tệp xây dựng của tôi sẽ hữu ích cho tôi để hiểu cách định cấu hình tệp. Sau đây là cách nó trông giống như:
#!/bin/bash
######################################################
# Usage:
# put this script in top of FFmpeg source tree
# ./build_android
# It generates binary for following architectures:
# ARMv6
# ARMv6+VFP
# ARMv7+VFPv3-d16 (Tegra2)
# ARMv7+Neon (Cortex-A8)
# Customizing:
# 1. Feel free to change ./configure parameters for more features
# 2. To adapt other ARM variants
# set $CPU and $OPTIMIZE_CFLAGS
# call build_one
######################################################
NDK=~/Desktop/android-ndk-r5b
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=darwin \
--prefix=$PREFIX \
--enable-cross-compile \
--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 " \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffserver \
--disable-ffprobe \
--extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" \
--enable-zlib \
--enable-version3 \
--enable-nonfree \
--enable-libmp3lame \
--enable-libspeex \
--enable-libtheora \
--enable-libfaac \
--enable-libvorbis \
--enable-libaacplus \
--prefix=$DIST_DIR \
$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
}
#arm v6
#CPU=armv6
#OPTIMIZE_CFLAGS="-marm -march=$CPU"
#PREFIX=./android/$CPU
#ADDITIONAL_CONFIGURE_FLAG=
#build_one
#arm v7vfpv3
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU "
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=
build_one
#arm v7vfp
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
#PREFIX=./android/$CPU-vfp
#ADDITIONAL_CONFIGURE_FLAG=
#build_one
#arm v7n
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm -march=$CPU -mtune=cortex-a8"
#PREFIX=./android/$CPU
#ADDITIONAL_CONFIGURE_FLAG=--enable-neon
#build_one
#arm v6+vfp
#CPU=armv6
#OPTIMIZE_CFLAGS="-DCMP_HAVE_VFP -mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU"
#PREFIX=./android/${CPU}_vfp
#ADDITIONAL_CONFIGURE_FLAG=
#build_one
Thanks cho bất kỳ loại thông tin/ý kiến / ví dụ hữu ích và vv
sẽ này cũng làm việc nếu tôi biên dịch nó trong Ubuntu 12.10 máy 64-bit? Và với NDK mới nhất? – agony
Tôi rất tiếc, tôi không biết, chỉ sử dụng Mac. Nhưng tôi không thấy lý do nào tại sao nó không hoạt động trên Ubuntu – bogdan
@bogdan cách sử dụng để nén video https://github.com/havlenapetr/FFMpeg –