您的位置:首页 > 移动开发 > Android开发

Android ffmpeg+librtmp+speex交叉编译

2015-10-26 22:04 477 查看
一、记录

Ubuntu 14 64位

ndk r10b

librtmp 2.4

speex 1.2rc2

ffmpeg 2.8.1

二、编译

1、编译librtmp

下载地址:http://rtmpdump.mplayerhq.hu/

Android.mk

# This is the Android makefile for librtmp

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES := \

amf.c \

hashswf.c \

log.c \

parseurl.c \

rtmp.c

LOCAL_CFLAGS += -DNO_CRYPTO

LOCAL_MODULE := librtmp

LOCAL_MODULE_TAGS := optional

include $(BUILD_STATIC_LIBRARY)

Application.mk

# The ARMv7 is significanly faster due to the use of the hardware FPU

APP_ABI := armeabi-v7a

APP_MODULES := librtmp

APP_PLATFORM := android-14

2、编译speex

下载地址:http://www.speex.org/downloads/

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := libspeex

LOCAL_CFLAGS = -DFIXED_POINT -DUSE_KISS_FFT -DEXPORT="" -UHAVE_CONFIG_H

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include

LOCAL_SRC_FILES := \

./libspeex/bits.c \

./libspeex/cb_search.c \

./libspeex/exc_10_16_table.c \

./libspeex/exc_10_32_table.c \

./libspeex/exc_20_32_table.c \

./libspeex/exc_5_256_table.c \

./libspeex/exc_5_64_table.c \

./libspeex/exc_8_128_table.c \

./libspeex/filters.c \

./libspeex/gain_table.c \

./libspeex/gain_table_lbr.c \

./libspeex/hexc_10_32_table.c \

./libspeex/hexc_table.c \

./libspeex/high_lsp_tables.c \

./libspeex/kiss_fft.c \

./libspeex/kiss_fftr.c \

./libspeex/lpc.c \

./libspeex/lsp.c \

./libspeex/lsp_tables_nb.c \

./libspeex/ltp.c \

./libspeex/modes.c \

./libspeex/modes_wb.c \

./libspeex/nb_celp.c \

./libspeex/quant_lsp.c \

./libspeex/sb_celp.c \

./libspeex/smallft.c \

./libspeex/speex.c \

./libspeex/speex_callbacks.c \

./libspeex/speex_header.c \

./libspeex/stereo.c \

./libspeex/testenc.c \

./libspeex/testenc_uwb.c \

./libspeex/testenc_wb.c \

./libspeex/vbr.c \

./libspeex/vorbis_psy.c \

./libspeex/vq.c \

./libspeex/window.c

include $(BUILD_STATIC_LIBRARY)

Application.mk

APP_ABI := armeabi-v7a

APP_MODULES := libspeex

APP_PLATFORM := android-14

3、编译ffmpeg

下载命令:git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg

(1)修改configure

#enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket

enabled librtmp && require librtmp librtmp/rtmp.h RTMP_Socket -lrtmp

#enabled libspeex && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex

enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex

(2)脚本

#!/bin/bash

LOCAL_PATH=`pwd`

export WORK_HOME=/home/governor

export NDK=$WORK_HOME/android-ndk-r10b

export PLATFORM=$NDK/platforms/android-8/arch-arm

export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64

export PREFIX=$LOCAL_PATH/build

pushd ffmpeg

./configure \

--arch=arm \

--target-os=linux \

--prefix=$PREFIX \

--enable-version3 \

--enable-gpl \

--disable-debug \

--enable-small \

--enable-memalign-hack \

--enable-pthreads \

--enable-asm \

--disable-shared \

--enable-static \

--enable-network \

\

--disable-muxers \

--disable-encoders \

--disable-programs \

--disable-doc \

--disable-postproc \

--disable-filters \

\

--disable-demuxer=avi \

--disable-demuxer=ogg \

\

--disable-decoders \

--enable-decoder=dvvideo \

--enable-decoder=rawvideo \

--enable-decoder=smvjpeg \

--enable-decoder=mlp \

--enable-decoder=flv \

--enable-decoder=h264 \

--enable-decoder=h264_crystalhd \

--enable-decoder=h264_mmal \

--enable-decoder=h264_qsv \

--enable-decoder=h264_vda \

--enable-decoder=h264_vdpau \

--enable-decoder=aac \

--enable-decoder=aac_fixed \

--enable-decoder=aac_latm \

--enable-decoder=adpcm_thp_le \

--enable-decoder=adpcm_vima \

--enable-decoder=adpcm_xa \

--enable-decoder=adpcm_yamaha \

--enable-decoder=libspeex \

\

--disable-protocols \

--enable-protocol=hls \

--enable-protocol=http \

--enable-protocol=librtmp \

--enable-protocol=rtmp \

--enable-protocol=rtp \

--enable-protocol=udp \

--enable-protocol=tcp \

\

--enable-librtmp \

--enable-libspeex \

--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="-I$PREFIX/include -O3 -fpic -march=armv7-a -mtune=cortex-a8 -mfloat-abi=softfp -mfpu=neon -DANDROID" \

--extra-ldflags="-L$PREFIX/lib"

make -j4 install

popd

popd

三、问题总结

1、Android工程添加librtmp.a后,提示各种unreference RTMP_XXXX

解决:最早使用gcc编译librtmp,直接在rtmpdump/librtmp下make,nm查看所有unreference的函数都有,最后是更改了ffmpeg编译脚本,configure报错“librtmp not found”,查看了config.log,发现提示ld path/to/librtmp.a incompatible ...,最终改为ndk编译librtmp;

注:speex通librtmp
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: