二、编译ffmpeg

编译环境

  • Ubuntu14.04
  • Ffmpeg2.5.2
  • Anroid-ndk-r9d-Linux-x86_64

编译前的准备

查看ubuntu的版本是32位还是64位 uname -a

android-ndk需要和ubuntu版本位数保持一致

编译步骤

  1. 下载ndk

    https://dl.google.com/android/ndk/android-ndk-r9d-linux-x86_64.tar.bz2

  2. 下载ffmpeg

    http://ffmpeg.org/releases/ 下载2.5.2版本

  3. 创建目录

    • 在ubuntu中/home下创建NDK文件夹,将下载好的android-ndk-r9d解压到NDK文件夹
    • 解压android_ndk_r9d
      --- tar -jxvf android-ndk-r9d-linux-x86_64.tar.bz2
    • 解压ffmpeg2.5.2
      --- tar -jxvf ffmpeg-2.5.2.tar.bz2
    • 将解压后的ffmpeg2.5.2复制到android-ndk-r9d/sources/文件夹下
      ---cp -a ffmpeg-2.5.2 android-ndk-r9d/sources/
  4. 编写build_android.sh

    在ffmpeg-2.5.2文件夹中创建build_android.sh文件

    ---vim build_android.sh

    #!/bin/sh
    
    NDK=$HOME/NDK/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-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --disable-everything \
    --enable-decoder=h264 \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --target-os=linux \
    --arch=arm \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
    make clean
    make
    make install
    }
    CPU=arm
    PREFIX=$(pwd)/android/$CPU
    ADDI_CFLAGS="-marm"
    build_one
    
  5. 修改configure文件

    针对android需要将configure中的如下四行(2746-2749,不同的ffmpeg的版本行数可能会有差异)

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

    注意:如果不修改这四行的内容直接编译,编译出来的so文件类似libavcodec.so.55.39.101,Android上无法加载

  6. 编译脚本./build_android.sh

    • 如果build_android.sh没有可执行权限,请使用如下命令

      chmod +x build_android.sh

    • 如果使用./build_android.sh报如下错误

    -bash: ./start.sh: /bin/sh^M: bad interpreter: No such file or directory

    这是由于在window编辑build_android.sh的编码格式引起的。

    可通过如下操作解决:

    • .查看该文件:vim build_android.sh
    • 查看该错误文件的格式(一般报错的文件格式是DOS):
      :set ff
    • 修改该文件格式为UNIX:
      :set ff=unix
    • 再保存
      :wq!
  7. 生成头文件和库文件

    成功编译完成后会在NDK/android-ndk-r9d/sources/ffmpeg-2.5.2/android/文件夹中生成一个arm文件夹,这个文件夹就是我们所需要的头文件和动态库,到此就大功告成啦。

    编译所需要的所有文件及编译出来的动态库下载

    https://download.csdn.net/download/adolph_lu/10430637

你可能感兴趣的:(二、编译ffmpeg)