本文介绍在Ubuntu平台编译FFmpeg库,用于Android使用。前提需要配置好NDK的环境。可以参考之前的文章Android NDK环境搭建。

下载FFmpeg

在官网下载FFmpeg源码,https://ffmpeg.org/download.html

本文基于FFmpeg2.8进行编译。

将下载的文件解压,得到ffmpeg目录。

修改configure文件

由于FFmpeg默认生成的库文件格式为libavcodec.so.xx.xx.x。其中的xx就是主副版本号,这种格式在Ubuntu下使用是没有问题的,但是在Android下开发使用,并不把其作为有效的库文件。所以需要修改其他生成的文件名的格式。

通过修改configure文件要实现,打开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, make, make install。其中configure的配置文件根据需要进行配置,如果是第一次使用,可以按如下进行配置。如果你不是第一次使用,相信你对于配置的参数应该已经知道自己需要哪些功能。

在与ffmpeg相同级别建立,编译脚本文件build.sh

#!/bin/bashNDK=/home/mn/bin/android-ndk-r15bSYSROOT=$NDK/platforms/android-16/arch-arm/TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64PREFIX=../outputADDI_CFLAGS="-marm"# --disable-symver - disable symbolic versioningfunction build_one{    ./configure \        --prefix=$PREFIX \        --enable-shared \        --enable-small \        --disable-static \        --disable-doc \        --disable-ffmpeg \        --disable-ffplay \        --disable-ffprobe \        --disable-ffserver \        --disable-symver \        --target-os=linux \        --arch=arm \        --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \        --enable-cross-compile \        --sysroot=$SYSROOT \        --extra-cflags="-Os -fpic $ADDI_CFLAGS" \        --extra-ldflags="$ADDI_LDFLAGS" \        $ADDITIONAL_CONFIGURE_FLAG    make clean    make -j4    make install}cd ffmpegbuild_one

在脚本的开始处定义了一些变量,其他NDK需要根据自己的环境进行配置,配置为NDK的根目录。

PREFIX为编译的输出的目录。其他参数不需要修改。

执行如下命令进行编译:

$ chmod u+x build.sh$ ./build.sh

等待编译结束。在output/lib/的目录下生成如下文件:

libavcodec-57.solibavcodec.solibavdevice-57.solibavdevice.solibavfilter-6.solibavfilter.solibavformat-57.solibavformat.solibavutil-55.solibavutil.solibswresample-2.solibswresample.solibswscale-4.solibswscale.sopkgconfig

错误处理

如果在编译的过程中出现了错误,查看ffmpeg/config.log对配置的日志,及make的错误输出。欢迎留言相互交流。

By 枫竹梦

更多相关文章

  1. Android文件系统的提取方法(一)
  2. Android !No Launcher activity found!错误
  3. Android发送邮件附带文件
  4. android的文件系统结构及其引导过程的初步理解
  5. 第一行代码(第二版)自学笔记之第一篇:Android Studio开发环境的搭建
  6. Android安装环境搭建

随机推荐

  1. 我做了五年Android应用层开发,凭什么比一
  2. Android对Linux内核的改动你知道多少
  3. Android图文混排
  4. Android(安卓)开发饭碗保住了,最新时报,谷
  5. Android(安卓)针对ListActivity中ListVie
  6. 面试造火箭要初级面高级,Android开发两年,
  7. 进度圈的显示
  8. Android(安卓)Handler机制简单分析
  9. [Android(安卓)分享]GitHub Android(安卓
  10. Android(安卓)Graphics专题(1)--- Canvas基