android ffmpeg编译

上一篇 / 下一篇  2013-01-29 13:34:44 / 个人分类:多媒体开发

开发过程中使用ffmpeg进行h264解码,首先到ffmpeg官网下载最新的版本,可以git clone一下,然后将下载的ffmpeg放在一个jni文件夹下,进入ffmpeg目录下面,添加一个文件夹android,在android目录下添加armv7-a目录,然后回到ffmpeg目录,添加一个config.sh的目录,内容如下:
NDK=/opt/android-ndk-r8d
PLATFORM=$NDK/platforms/android-8/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86


function build_one
{
./configure --target-os=linux \
    --prefix=$PREFIX \
    --enable-cross-compile \
    --arch=arm \
    --enable-nonfree \
    --enable-asm \
    --cpu=cortex-a8 \
    --enable-neon \
    --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 $OPTIMIZE_CFLAGS " \
    --disable-shared \
    --enable-static \
    --extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib  -nostdlib -lc -lm -ldl -llog" \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-avfilter \
    --disable-avdevice \
    --disable-swscale \
    --disable-swresample \
    --disable-muxers \
    --disable-demuxers \
    --disable-encoders \
    --disable-decoders \
    --enable-avformat \
    --enable-avcodec \
    --enable-decoder=h264 \
    --enable-fft \
    --disable-mdct \
    --disable-parsers \
    --enable-parser=h264 \
    --disable-mmx \
    --disable-bsfs \
    --disable-filters \
    --disable-network \
    --disable-protocols \
    --disable-optimizations \
    --disable-indevs \
    --disable-debug \
    --disable-symver \
    --disable-doc \
    --disable-postproc \
    --disable-stripping \
    --disable-pthreads \
    --disable-yasm \
    --disable-vis \
    --disable-vaapi \
    --disable-vdpau \
    --disable-sse \
    --disable-ssse3 \
    --disable-avx \
    --disable-amd3dnow \
    --disable-amd3dnowext \
    --disable-hwaccels \
    --enable-zlib \
    --enable-pic \
    --enable-pthreads \
    --enable-small \

    $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 -lc -lm -lz -ldl -llog  --warn-once  --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a
}

#arm v7 neon
LOCAL_ARM_NEON=true
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm -mcpu=cortex-a8"
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=
build_one

#arm v7 vfp3
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU"
#PREFIX=./android/$CPU
#ADDITIONAL_CONFIGURE_FLAG=
#build_one
然后将config.sh进行设置权限chmod +x config.sh,然后在终端下执行./config.sh,就会在android/armv7-a下生成libffmpeg.so文件,然后在自己在jni目录下面添加一个Android.mk,Application.mk文件。下面是我的两个文件:
LOCAL_PATH := $(call my-dir)

#declare the prebuilt library
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg-prebuilt
LOCAL_SRC_FILES := ffmpeg/android/armv7-a/libffmpeg.so
LOCAL_EXPORT_C_INCLUDES := ffmpeg/android/armv7-a/include
LOCAL_EXPORT_LDLIBS := ffmpeg/android/armv7-a/libffmpeg.so
LOCAL_PRELINK_MODULE := true
include $(PREBUILT_SHARED_LIBRARY)

#the andzop library
include $(CLEAR_VARS)
TARGET_ARCH_ABI=armeabi-v7a
LOCAL_ARM_NEON=true
LOCAL_ALLOW_UNDEFINED_SYMBOLS=false
#LOCAL_ARM_NEON=true
LOCAL_MODULE := ffmpeg-test
LOCAL_SRC_FILES := jniffmpeg/VideoDecoder.c
#LOCAL_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/android/armv7-a/include
LOCAL_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/android/armv7-a/include \
            $(LOCAL_PATH)/ffmpeg \
                    $(LOCAL_PATH)/ffmpeg/libavutil \
                    $(LOCAL_PATH)/ffmpeg/libavcodec \
                    $(LOCAL_PATH)/ffmpeg/libavformat \
                    $(LOCAL_PATH)/ffmpeg/libavcodec \
                    $(LOCAL_PATH)/ffmpeg/libswscale \
                        $(LOCAL_PATH)/jniffmpeg
LOCAL_SHARED_LIBRARY := ffmpeg-prebuilt
LOCAL_LDLIBS    := -llog -ljnigraphics -lz -lm $(LOCAL_PATH)/ffmpeg/android/armv7-a/libffmpeg.so
include $(BUILD_SHARED_LIBRARY)


APP_ABI := armeabi-v7a armeabi
APP_PLATFORM.:= android-8
在jni目录下输入ndk-build就会在jni同一层下生成一个libs文件,里面就有我们编译生成的NDK调用的库

TAG:

 

评分:0

我来说两句

Open Toolbar