android移植ffmpeg的编译

笔记 专栏收录该内容
18 篇文章 0 订阅

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








  • 0
    点赞
  • 3
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值