Ubuntu下编译android所需ffmpeg的so库

前端之家收集整理的这篇文章主要介绍了Ubuntu下编译android所需ffmpeg的so库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

编译ffmpeg源码

环境说明

尊重原创,转载请注明出处,原文地址: http://blog.csdn.net/qq137722697

@H_403_8@

环境(包括版本)尽量下面的保持一致,其他环境不一定能成功。

系统: Ubuntu16.04 LTS
最好不要再windows系统下编译,可在windows中安装VMware虚拟一个linux系统出来,对linux系统不太熟悉的建议使用Ubuntu,入门比较快。

NDK版本: android-ndk-r9d

试过16、14、13版本都未成功,使用ndk-r9d才成功的。这里是下载地址:https://dl.google.com/android/ndk/android-ndk-r9d-linux-x86_64.tar.bz2

ffmpeg版本: ffmpeg-3.2.9
使用过最新的ffmpeg-3.4编译并未成功,于是使用了3.2.9。下载地址(建议下载tar.bz2的):https://ffmpeg.org/download.html#releases

修改configure

在ffmpeg根目录找到configure文件,由于根据此配置文件(在ffmpeg源码的根目录)生成的so名字类似于libXXX.05421423.so;android不能失败了带有数字的so库;需要将生成so库名字的配置修改一下,主要有四个地方.
将以下的内容

  1. SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
  2. LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
  3. SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
  4. SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'

替换为:

  1. SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
  2. LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
  3. SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
  4. SLIB_INSTALL_LINKS='$(SLIBNAME)'

生成config.h文件

在ffmpeg根目录中输入一下命令:

  1. ./configure

如果有错误提示,根据提示来,在./configure 后面加上提示参数即可(注意是两个-),如:

创建编译脚本

在与ffmpeg同级目录创建一个用于存放编译后生成的动态库的文件夹,这里叫armlib

在与ffmpeg同级的目录下新建build-ffmpeg-arm.sh文件内容为:

  1. #!/bin/bash
  2. #需要改成你的ffmpeg源码地址
  3. cd /home/hdl/ffmpeg/ffmpeg-3.2.9
  4.  
  5. make clean
  6. #需要改成你的ndk地址
  7. export NDK=/home/hdl/tools/android-ndk-r9d
  8. export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt
  9. export PLATFORM=$NDK/platforms/android-8/arch-arm
  10. #这里是最后生成的库文件存放的位置,改成你自己的即可
  11. export PREFIX=/home/hdl/ffmpeg/armlib
  12. build_one(){
  13. ./configure --target-os=linux --prefix=$PREFIX \
  14. --enable-cross-compile \
  15. --enable-runtime-cpudetect \
  16. --disable-asm \
  17. --arch=arm \
  18. --cc=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-gcc \
  19. --cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \
  20. --disable-stripping \
  21. --nm=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-nm \
  22. --sysroot=$PLATFORM \
  23. --enable-gpl --enable-shared --disable-static --enable-small \
  24. --disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-debug \
  25. --extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv6"
  26. }
  27.  
  28. build_one
  29.  
  30. make
  31. make install
  32.  
  33. cd ..

注意:以上生成的是armeabi类型的so,armeabi已能涵盖大部分安卓手机,其他类型的需要更改一下配置。

为build-ffmpeg-arm.sh授予可执行的权限

命令行下输入:

  1. chmod +x build-ffmpeg-arm.sh

开始编译

  1. ./build-ffmpeg-arm.sh

等待几分钟,会在/home/hdl/ffmpeg/armlib(这是我自己的哦,即configure中设置的PREFIX地址)目录下面生成编译后的文件

注意:请使用带有版本号的so文件(如:libavcodec-57.so),不带版本号的只是一个”快捷方式”

尊重原创,转载请注明出处,原文地址: http://blog.csdn.net/qq137722697

@H_403_8@

猜你在找的Ubuntu相关文章