您的位置 首页 观点

ubuntu+ndk编译ffmpeg

近来想把ffmpeg移植到android上来用,所以就研究了两天,从网上乱搜一通,网上都说在linux系统下比较好编译通过,所以就听取了意见,装了vmware在里面

近来想把ffmpeg移植到android上来用,所以就研讨了两天,从网上乱搜一通,网上都说在linux体系下比较好编译经过,所以就听取了定见,装了vmware在里面装了个ubuntu13.04的64位体系,紧接着我就刻不容缓的http://developer.android.com/tools/sdk/ndk/index.html下载了android-ndk-r9b-linux-x86_64.tar.bz2在ubuntu体系下装备好了NDK的环境变量,又从ffmpeg官网下载了ffmpeg2.0.1版别的源码,但是依照:http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/ 这个教程搞了一天都没编译经过,老是报一些莫名美妙的过错:“找不到地点目录和文件”。可能是我那个地方装备的不对吧。要就有那位兄弟用这个教程编译ffmpeg成功生成libffmpeg.so文件的告诉我一声。

这个办法不可那就换个办法喽!看到网上说ffmpeg不同版别编译方法也有所不同,已然这样的话,我就换了一个低版别的ffmpeg0.8.1。下载此版别的链接为:http://www.ffmpeg.org/releases/ffmpeg-0.8.1.tar.gz 相同ndk也换了个低版别的。下载链接为:http://dl.google.com/android/ndk/android-ndk-r6-linux-x86.tar.bz2

一、在ubuntu下装备android ndk环境变量

把下载好的android-ndk-r6版别解压到/home/ysx目录下(注:ysx这个文件夹是我的,这个目录能够随意换)。

按Alt+F2在查找框中输入gnome-terminal,运转它。在出来的这个指令窗口中输入:gedit ~/.bashrc 回车在跳出来的文件结尾增加:export NDK=/home/ysx/android-ndk-r6 换行 export PATH=${PATH}:$NDK 保存封闭。

source ~/.bashrc使其修正的文件收效。

ndk-build看看我们装备环境变量成功没,只需没出command not found就证明环境变量装备成功。

二、下载ffmpeg源码

我用ffmpeg0.8.1编译成功了,所以此教程只针对这个版别的。下载网址为:http://www.ffmpeg.org/releases/ffmpeg-0.8.1.tar.gz。

解压它。

三、装备ffmpeg环境

首要在/home/ysx/android-ndk-r6目录下新建一个以ffmpeg命名的文件夹。

把寄存ffmpeg源码的文件夹改名为jni,然后把寄存ffmpeg源码的jni文件夹剪切到/home/ysx/android-ndk-r6/ffmpeg目录下。

进入到jni文件夹里,在里面创立一个姓名为config.sh的文件。

增加config.sh文件的内容,内容如下:(注:cross-prefix、extra-cflags、extra-ldflags这三个参数后边的途径能够依据自己途径修正)

./configure \

–disable-static \

–enable-shared \

–enable-gpl \

–enable-version3 \

–enable-nonfree \

–disable-doc \

–disable-ffmpeg \

–disable-ffplay \

–disable-ffprobe \

–disable-ffserver \

–disable-avdevice \

–disable-avfilter \

–disable-postproc \

–enable-small \

–cross-prefix=/home/ysx/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-\

–enable-cross-compile\

–target-os=linux \

–extra-cflags=’-I/home/ysx/android-ndk-r6/platforms/android-9/arch-arm/usr/include’\

–extra-ldflags=’-L/home/ysx/android-ndk-r6/platforms/android-9/arch-arm/usr/lib -nostdlib’ \

–arch=arm \

–disable-symver \

–disable-debug \

–disable-stripping \

sed -i’s/HAVE_LRINT 0/HAVE_LRINT 1/g’config.h

sed -i’s/HAVE_LRINTF 0/HAVE_LRINTF 1/g’config.h

sed -i’s/HAVE_ROUND 0/HAVE_ROUND 1/g’config.h

sed -i’s/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g’config.h

sed -i’s/HAVE_TRUNC 0/HAVE_TRUNC 1/g’config.h

sed -i’s/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g’config.h

四、履行config.sh脚本文件

首要有必要确保你的光标定位到了jni文件夹里(注:~/android-ndk-r6/ffmpeg/jni$)

给config.sh的履行权限:sudo chmod a+x config.sh

履行脚本:./config.sh

呈现下图的姿态就证明履行

五、把Android.mk文件移到jni文件夹里

Android.mk文件内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := ffmpeg

include $(LOCAL_PATH)/config.mak

LOCAL_CFLAGS := -DHAVE_AV_CONFIG_H -std=c99

AVUTIL_C_FILES = adler32.c \

aes.c \

audioconvert.c \

avstring.c \

base64.c \

cpu.c \

crc.c \

des.c \

error.c \

eval.c \

fifo.c \

file.c \

imgutils.c \

intfloat_readwrite.c \

inverse.c \

lfg.c \

lls.c \

log.c \

lzo.c \

mathematics.c \

md5.c \

mem.c \

dict.c \

opt.c \

parseutils.c \

pixdesc.c \

random_seed.c \

rational.c \

rc4.c \

samplefmt.c \

sha.c \

tree.c \

utils.c \

arm/cpu.c

AVUTIL_SRC_FILES = $(addprefix libavutil/, $(sort $(AVUTIL_C_FILES)))

AVCODEC_C_FILES = allcodecs.c \

audioconvert.c \

avpacket.c \

bitstream.c \

bitstream_filter.c \

dsputil.c \

faanidct.c \

fmtconvert.c \

imgconvert.c \

jrevdct.c \

options.c \

parser.c \

raw.c \

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/guandian/298057.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部