设为首页 加入收藏

TOP

FFmpeg的Android平台移植—编译篇(一)
2014-11-24 00:14:53 来源: 作者: 【 】 浏览:30
Tags:FFmpeg Android 平台 移植 编译

本文的完整源代码下载


------------------------------------------分割线------------------------------------------


在 2014年LinuxIDC.com\4月\FFmpeg的Android平台移植—编译篇


------------------------------------------分割线------------------------------------------


推荐阅读:


环境准备:


Ubuntu12.04 TLS


android-ndk-r9d-linux-x86_64.tar.bz2


adt-bundle-windows-x86_64-20131030.zip


第一步:源代码下载


到FFmpeg官方网站http://www.ffmpeg.org/上去下载源代码,这里下载的源代码是最权威的。进入官网之后,选择”Download”进入下载页面,截止2014年3月28日止,最新的发布的稳定版本为FFmpeg2.2,代号”Muybridge”。选择该下方的”Downloadgzip tarball”进行下载,下载后的文件名为ffmpeg-2.2.tar.gz,大约8.3M。


第二步:在Linux环境下编译FFmpeg


在Windows平台可以采用VMplayer虚拟机上安装ubuntu的方式,本人也是采用这种方式。


本文以/home/dennis为根目录进行操作和说明:


将ffmpeg-2.2.tar.gz拷贝至根目录,然后执行如下解压命令将其解压:


$tar zxf ffmpeg-2.2.tar.gz


解压后将得到/home/dennis/ffmpeg-2.2目录。



修改ffmpeg-2.2/configure文件


如果直接按照未修改的配置进行编译,结果编译出来的so文件类似libavcodec.so.55.39.101,版本号位于so之后,Android上似乎无法加载。因此需要按如下修改:


将该文件中的如下四行:


SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'


LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'


SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'


SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'


替换为:


SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'


LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'


SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'


SLIB_INSTALL_LINKS='$(SLIBNAME)'



编写build_android.sh脚本文件


FFmpeg可以说是一个包络音视频编解码及格式的超级霸。因此在编译前通常都需要进行配置,设置相应的环境变量等。


所有的配置选项都在ffmpeg-2.2/configure这个脚本文件中,可以通过执行如下命令来查看所有的配置选项:


$ ./configure –help


配置选项很多,也较为复杂,这里先把我需要的搞出来,然后有时间再慢慢看。


我们将需要的配置项和环境变量设置写成一个sh脚本文件来运行以便编译出Android平台需要的so文件出来。


build_android.sh的内容如下:



#!/bin/bash


NDK=/home/dennis/android-ndk-r9d


SYSROOT=$NDK/platforms/android-9/arch-arm/


TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64



function build_one


{


./configure \


--prefix=$PREFIX \


--enable-shared \


--disable-static \


--disable-doc \


--disable-ffserver \


--enable-cross-compile \


--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-\


--target-os=linux \


--arch=arm \


--sysroot=$SYSROOT \


--extra-cflags="-Os -fpic$ADDI_CFLAGS" \


--extra-ldflags="$ADDI_LDFLAGS" \


$ADDITIONAL_CONFIGURE_FLAG


}


CPU=arm


PREFIX=$(pwd)/android/$CPU


ADDI_CFLAGS="-marm"


build_one



这个脚本文件有几个地方需要注意:


(1) NDK,SYSROOT和TOOLCHAIN这三个环境变量一定要换成你自己机器里的。


(2) 确保cross-prefix变量所指向的路径是存在的。


给build_android.sh增加可执行权限:


$chmod+x build_android.sh


执行build_android.sh


$./build_android.sh


配置该脚本完成对ffmpeg的配置,会生成config.h等配置文件,后面的编译会用到。如果未经过配置直接进行编译会提示无法找到config.h文件等错误。


$make


$make install


至此,会在/home/dennis/ffmpeg-2.2目录下生成一个android目录,其中/home/dennis/ffmpeg-2.2/android/arm/lib目录下的so库文件如下:


-rwxr-xr-x 1 dennisdennis 55208 Mar 29 16:26libavdevice-55.so


-rwxr-xr-x 1 dennisdennis 632476 Mar 29 16:26 libavfilter-4.so


-rwxr-xr-x 1 dennisdennis 1442948 Mar 29 16:26 libavformat-55.so


-rwxr-xr-x 1 dennisdennis 7985396 Mar 29 16:26 libavcodec-55.so


-rwxr-xr-x 1 dennisdennis 83356 Mar 29 16:26libswresample-0.so


-rwxr-xr-x 1 dennisdennis 308636 Mar 29 16:26 libswscale-2.so


-rwxr-xr-x 1 dennisdennis 300580 Mar 29 16:26libavutil-52.so


注:以上列表去掉了符号链接文件和pkgconfig目录。


第三步:创建一个普通的Android工程


(1) 将上面编译成功的7个so文件放入到该目录下;


(2) 将/home/dennis/ffmpeg-2.2/android/arm/include下的所有头文件夹拷贝到该目录下.


package cn.dennishucd;
public class FFmpegNati

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HelloWorld之Hibernate版 下一篇用Java语言将utf8编码的汉字还原

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: