android移植ffmpeg的編譯

一,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)








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章