美文网首页
二、编译ffmpeg

二、编译ffmpeg

作者: 秋风潇潇1992 | 来源:发表于2018-05-22 19:49 被阅读0次

    编译环境

    • 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

          本文链接:https://www.haomeiwen.com/subject/pnpkjftx.html