windows环境下android studio 2.3 NDK编译FFmpeg



本篇日期:2017-3-5
  参考:
  http://blog.csdn.net/huweijian5/article/details/52840177
  
  基本环境:
  1. 操作系统:Windows10  64位;
  2. Android Studio 2.3,64位。
  3. Android NDK开发包:直接使用Android Studio安装NDK。(需要梯子)
  
  操作步骤:
  第一步:安装MinGW
  下载地址:https://sourceforge.net/projects/mingw/files/。必须最少选择”mingw32-gcc-ada”和”msys-base”。此时还需要配置环境变量,将;C:\MinGW\bin目录添加到环境变量path中。
  
  第二步,下载ffmpeg
  c:
  md ffpmeg
  cd ffmpeg
  git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
  如果速度太慢,需要梯子。
  
  第三步,修改configure
  找到ffmpeg目录下的configure文件,将#build settings节下如下代码:
  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)'
  这是这是因为android so命名的需要。
  
  第四步,新建一个bld.sh,里面的代码如下:

 #!/bin/bash
   export TMPDIR=C:/ffmpeg/tmpdir
   NDK=C:/Users/user/AppData/Local/Android/sdk/ndk-bundle
   SYSROOT=$NDK/platforms/android-16/arch-arm/
   TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
   CPU=arm
   PREFIX=C:/ffmpeg/install
   ADDI_CFLAGS="-marm"
   function build_one
   {
   ./configure \
   --prefix=$PREFIX \
   --enable-shared \
   --disable-static \
   --disable-doc \
   --disable-ffmpeg \
   --disable-ffplay \
   --disable-ffprobe \
   --disable-ffserver \
   --disable-doc \
   --disable-symver \
   --enable-small \
   --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
   }
   build_one


   【注意】应当先建立目录c:\ffmpeg\tmpdir和c:\ffmpeg\install,否则后面出错!
  NDK则替换为你本机的ndk路径;SYSROOT根据你的本机设置,但不要大于你的target,比如你的target是22,就不要用 大于android-22的;PREFIX则是编译后so的存放地址,路径可以随便指定。
  
  第五步,编译
  执行C:\MinGW\msys\1.0\msys.bat后,在终端命令行窗口导航到c:\ffmpeg
  cd /
  cd c
  cd ffmpeg\ffmpeg
  chmod +x bld.sh
  ./bld.sh
  【坑】这样,出现错误:……c:\Mintoolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-gcc is unable to create an executable file.
  原因是写了:NDK=C:\Users\user\AppData\Local\Android\sdk\ndk-bundle
  应当修改为:NDK=C:/Users/user/AppData/Local/Android/sdk/ndk-bundle
  【坑】到了makes时候,出现错误:
  library.mak:102: *** missing separator.  Stop.
  原因是:在git中提供了autocrlf的设置,可以用来自动转换CRLF,它可以设置成true,false,input。Windows上的msysgit默认设置了autocrlf为true,这样,在提交时自动地把行结束符CRLF转换成LF,而在签出代码时把LF转换成CRLF。解决办法,参考
  http://blog.csdn.net/xinzhan_56/article/details/8087343
  进入到ffmpeg目录中:
  cd \ffmpeg
  运行
  Git config --global core.autocrlf false
   #然后运行下面的命令删除ffmpeg代码,并重新获取一下即可
  git rm --cached -r .
  git reset --hard
  【注意】第一个命令最后那个'.'不能少!
  最好编译成功后,在ffmpeg\install目录下有lib和include,lib目录下就是那些需要引用的so文件。
  




你可能感兴趣的:(ffmpeg,Windows)