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

FFMPEG移植到android项目(一)ffmpeg的编译

2017-06-12 21:19 761 查看

准备

ubuntu14.04

ffmpeg3.3.1

ndk

yasm

  关于ndk环境的配置,参考文章:Android studio ndk编程——(一)。ffmpeg源码的下载参考官网:ffmpeg下载地址

yasm的安装:

apt-get install yasm

编译

在准备过程都弄好后,下面开始ffmpeg的编译。

解压ffmpeg

对下载好的ffmpeg文件进行解压。ubuntu14.04可以直接鼠标右键解压。

对解压后的ffmpeg文件的configure进行配置。

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)'


开始执行configure脚本

xiaoyao@xiaoyao-ThinkPad-Edge-E540:~/project/ffmpeg/ffmpeg-3.3.1$ ls
arch.mak                COPYING.GPLv2     ffmpeg_videotoolbox.c  libswresample
Changelog               COPYING.GPLv3     ffplay.c               libswscale
cmdutils.c              COPYING.LGPLv2.1  ffprobe.c              LICENSE.md
cmdutils_common_opts.h  COPYING.LGPLv3    ffserver.c             MAINTAINERS
cmdutils.h              CREDITS           ffserver_config.c      Makefile
cmdutils_opencl.c       doc               ffserver_config.h      presets
common.mak              ffmpeg.c          INSTALL.md             README.md
compat                  ffmpeg_cuvid.c    libavcodec             RELEASE
config.asm              ffmpeg_dxva2.c    libavdevice            RELEASE_NOTES
config.fate             ffmpeg_filter.c   libavfilter            tests
config.h                ffmpeg.h          libavformat            tools
config.log              ffmpeg_opt.c      libavresample          VERSION
config.mak              ffmpeg_qsv.c      libavutil              version.sh
configure               ffmpeg_vaapi.c    libpostproc
CONTRIBUTING.md         ffmpeg_vdpau.c    library.mak
xiaoyao@xiaoyao-ThinkPad-Edge-E540:~/project/ffmpeg/ffmpeg-3.3.1$ ./configure


在ffmpeg解压文件夹的同级建立文件夹simplefflib,此文件夹保存编译后生成的lib和includ文件。

xiaoyao@xiaoyao-ThinkPad-Edge-E540:~/project/ffmpeg$ ls
build-ffmpeg-arm.sh   ffmpeg-3.3.1          simplefflib
build-ffmpeg-arm.sh~  ffmpeg-3.3.1.tar.bz2


在同级目录新建脚本build-ffmpeg-arm.sh。脚本内容为:

#!/bin/bash

cd /home/xiaoyao/project/ffmpeg/ffmpeg-3.3.1

make clean

export NDK=/home/xiaoyao/android-sdk-linux/ndk-bundle
# 指定编译工具链
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt
# 指定使用NDK Platform版本,这里指定的ndk platform的路径,一定要选择比# 你的目标机器使用的版本低的,比如你的手机是android-15版本,那么就选择低# 于15的
export PLATFORM=$NDK/platforms/android-23/arch-arm
# 指定编译后的安装目录
export PREFIX=/home/xiaoyao/project/ffmpeg/simplefflib
build_one(){
./configure --target-os=linux --prefix=$PREFIX \
--enable-cross-compile \
--enable-runtime-cpudetect \
--disable-asm \
--arch=arm \
--cc=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \
--disable-stripping \
--nm=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--enable-gpl --enable-shared --disable-static --enable-small \
--disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-debug \
--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a"
}

build_one

make
make install

cd ..


根据自己的电脑配置不同,更改第二句以及NDK、PREBUILT、PLATFORM、PREFIX这几处的路径。

开始执行脚本,脚本执行完会在simplefflib文件夹中生成相应的文件。

xiaoyao@xiaoyao-ThinkPad-Edge-E540:~/project/ffmpeg/simplefflib$ ls
include  lib
xiaoyao@xiaoyao-ThinkPad-Edge-E540:~/project/ffmpeg/simplefflib$ cd include/
xiaoyao@xiaoyao-ThinkPad-Edge-E540:~/project/ffmpeg/simplefflib/include$ ls
libavcodec   libavfilter  libavutil    libswresample
libavdevice  libavformat  libpostproc  libswscale
xiaoyao@xiaoyao-ThinkPad-Edge-E540:~/project/ffmpeg/simplefflib/include$ cd ..
xiaoyao@xiaoyao-ThinkPad-Edge-E540:~/project/ffmpeg/simplefflib$ ls
include  lib
xiaoyao@xiaoyao-ThinkPad-Edge-E540:~/project/ffmpeg/simplefflib$ cd lib/
xiaoyao@xiaoyao-ThinkPad-Edge-E540:~/project/ffmpeg/simplefflib/lib$ ls
libavcodec-57.so   libavfilter.so     libpostproc-54.so   libswscale.so
libavcodec.so      libavformat-57.so  libpostproc.so      pkgconfig
libavdevice-57.so  libavformat.so     libswresample-2.so
libavdevice.so     libavutil-55.so    libswresample.so
libavfilter-6.so   libavutil.so       libswscale-4.so
xiaoyao@xiaoyao-ThinkPad-Edge-E540:~/project/ffmpeg/simplefflib/lib$


至此,ffmpeg的编译就完成了,剩下的就是将编译完的文件移植到android项目。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android ffmpeg 移植