一,ffmpeg编译(版本ffmpeg-HEAD-b2ad33d.tar)
1,安装汇编编译器[sudo apt-get install yasm].
2,ffmpeg根目录放编译脚本build_android.sh内容如下:(备注:NDK相关路径按自己实际情况修改,若需包含编译x264和mp3的话红色部分用于指定x264和mp3的头文件和库所在目录。)
#!/bin/bash
NDk=/home/lch/Desktop/android-ndk-r9d
SYSROOT=/home/lch/Desktop/android-ndk-r9d/platforms/android-9/arch-arm/
TOOLCHAIN=/home/lch/Desktop/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86
#have no surpport x264.--enable-x264
function build_one
{
./configure --enable-cross-compile \
--arch=arm \
--target-os=linux \
--disable-stripping \
--prefix=./output \
--enable-version3 \
--enable-libmp3lame \
--disable-shared \
--enable-static \
--enable-gpl \
--enable-memalign-hack \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic -Wfatal-errors -Wno-deprecated" \
--enable-decoder=mjpeg \
--enable-demuxer=mjpeg \
--enable-parser=mjpeg \
--enable-demuxer=image2 \
--enable-muxer=mp4 \
--enable-encoder=libx264 \
--enable-libx264 \
--enable-decoder=h264 \
--enable-decoder=rawvideo \
--enable-protocol=file \
--enable-hwaccels \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-network \
--enable-filter=buffer \
--enable-filter=buffersink \
--disable-demuxer=v4l \
--disable-demuxer=v4l2 \
--disable-indev=v4l \
--disable-indev=v4l2 \
--extra-cflags="-I/home/lch/dennis/jni/x264 -I../libmp3lame" \
--extra-ldflags="-L/home/lch/dennis/jni/x264 -L../libmp3lame"
}
build_one
3,运行脚本。
4,make
5,make install,即可在prefix目录下得到相关库。
二,x264的编译。
1,在x264根目录下放编译脚本build264.sh内容如下:(NDK_HOME路径根据自己实际情况修改)
#!/bin/bash
NDK_HOME=/home/lch/Desktop/android-ndk-r9d
export NDK=$NDK_HOME
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt
export PLATFORM=$NDK/platforms/android-19/arch-arm
export PREFIX=./androidx264
./configure --prefix=$PREFIX \
--enable-static \
--enable-pic \
--disable-asm \
--disable-cli \
--host=arm-linux \
--cross-prefix=$PREBUILT/linux-x86/bin/arm-linux-androideabi- \
--sysroot=$PLATFORM
2,修改x264的config.h,,找到这句并修改为#define HAVE_LOG2F 0
3,运行脚本。
4,make
5,make install,即可在prefix目录下得到相关库。
三,libmp3lame的编译。
1,比较简单,直接使用Android.mk文件,内容如下(DIR是libmp3lame的路径需根据自己实际情况修改):
LOCAL_PATH := $(call my-dir)
DIR:=libmp3lame
include $(CLEAR_VARS)
LOCAL_MODULE := libmp3lame
LOCAL_SRC_FILES := \
${DIR}/bitstream.c \
${DIR}/encoder.c \
${DIR}/fft.c \
${DIR}/gain_analysis.c \
${DIR}/id3tag.c \
${DIR}/lame.c \
${DIR}/mpglib_interface.c \
${DIR}/newmdct.c \
${DIR}/presets.c \
${DIR}/psymodel.c \
${DIR}/quantize.c \
${DIR}/quantize_pvt.c \
${DIR}/reservoir.c \
${DIR}/set_get.c \
${DIR}/tables.c \
${DIR}/takehiro.c \
${DIR}/util.c \
${DIR}/vbrquantize.c \
${DIR}/VbrTag.c \
${DIR}/version.c
LOCAL_LDLIBS := -llog
include $(BUILD_STATIC_LIBRARY)
,2,执行ndk-build即可得到libmp3lame.a库。
四,对这几个库的使用:
在编写好自己的业务逻辑源码后,可以使用以下类似Android.mk文件对这几个库进行连接。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg_api
# These need to be in the right order
FFMPEG_LIBS := $(addprefix ffmpeg/, \
libavdevice/libavdevice.a \
libavformat/libavformat.a \
libavfilter/libavfilter.a \
libavcodec/libavcodec.a \
libswscale/libswscale.a \
libavutil/libavutil.a \
libswresample/libswresample.a \
libpostproc/libpostproc.a )
# ffmpeg uses its own deprecated functions liberally, so turn off that annoying noise
LOCAL_CFLAGS += -g -Iffmpeg -Wno-deprecated-declarations
LOCAL_LDLIBS += -llog -lz
LOCAL_LDFLAGS += $(FFMPEG_LIBS) libmp3lame/libmp3lame.a x264/libx264.a
LOCAL_SRC_FILES := ffmpeg/ffmpeg.c ffmpeg/ffmpeg_api.c ffmpeg/cmdutils.c ffmpeg/ffmpeg_opt.c ffmpeg/ffmpeg_filter.c
include $(BUILD_SHARED_LIBRARY)