本文主要介绍自己动手编译一份ffmpeg动态库,解决在android开发过程中没有合适的版本、或者合适配置的ffmepg的so库问题

一、版本下载

首先编译android的ffmpeg我们需要ffmpeg和ndk,而我们常用的动态库都是.so文件格式,因此我们得选择linux下做编译。

平台 Mac Windows Linux
编译产物 libjni_impl.dylib .obj libjni_impl.so

1.1、ffmpeg

ffmpeg这里使用3.4.11版本,可以去官网下载,也可以直接使用以下命令安装linux版本

curl http://ffmpeg.org/release/ffmpeg-3.4.11.tar.gz > ffmpeg-3.4.11.tar.gz

解压缩

tar -zxf ffmpeg-3.4.11.tar.gz

1.2、NDK

为了保证兼容性,这里使用r14b版本,可以去官网下载,也可以直接使用以下命令安装linux版本

curl https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip > android-ndk-r14b-linux-x86_64.zip

解压缩

unzip android-ndk-r14b-linux-x86_64.zip

二、编译ffmpeg生成so文件

编译ffmpeg生成so文件,用于android平台的,这里定位架构是armv7

2.1、build_android.sh脚本

#!/bin/bashNDK=/root/sdk/android-ndk-r14bbuild_one() {/root/sdk/ffmpeg-3.4.11/configure \--enable-cross-compile \--enable-shared \--disable-static \--disable-doc \--disable-ffmpeg \--disable-ffplay \--disable-ffserver \--disable-avdevice \--disable-symver \--prefix=$PREFIX \--cross-prefix=$CROSS_COMPILE \--target-os=android \--arch=$ARCH \--sysroot=$SYSROOT--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
make clean
make
make install
}ARCH=arm
CPU=armv7-a
# 设置编译后文件的输出目录
PREFIX=$(pwd)/android/$CPU
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
# 设置编译针对的平台,可以根据实际需求进行设置
# 当前设置为最低支持android-14版本,arm架构
SYSROOT=$NDK/platforms/android-14/arch-$ARCH
ADDI_CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon"build_one

2.2、脚本解释

–enable-cross-compile:开启交叉比编译

–enable-shared:开启动态库

–disable-static:关闭静态库

–disable-doc:关闭文档生成

–disable-ffmpeg:关闭ffmpeg的应用程序 (由ffmpeg编译生成exe可执行程序,这里只需要库不需要可执行程序)

–disable-ffplay:关闭生成播放器的应用程序

–disable-ffserver:关闭生成服务器的应用程序

–disable-avdevice:关闭访问电脑摄像头(用于电脑,手机需要调用系统的api)

–disable-symver:暂时不清楚

–prefix=$PREFIX:指定生成动态库的位置

–cross-prefix=$CROSS_COMPILE:交叉编译工具链的位置

–target-os=android:目标操作系统,这里写linux操作系统也可以

–arch=$ARCH:这里cpu架构是arm指令的

–sysroot=$SYSROOT:最低支持的android版本(NDK platforms结构如下)

–extra-cflags=“-Os -fpic $ADDI_CFLAGS”:编译C的优化指令

make clean:清空临时文件(这里的make是去调用makefile)

make:编译

make install:拷贝生成产物到指定位置

2.3、执行结果

sh build_android.sh

在./android/armv7-a/下生成对应sdk,lib下的就是用于android的so库

三、流程分析

上面编译ffmpeg脚本流程:shell -> configure -> make

首先我们编写build_android.sh脚本,调用configure配置参数,最后调用make命令生成动态库。

其中的make就是调用makefile,makefile是一种构建工具,类似于Gradle(构建.apk)、Maven(构建.war)

自己动手编译android ffmpeg相关推荐

  1. android:自己动手编译Android源码(超详细)

    自己动手编译Android源码(超详细) 涅槃1992 2016.06.20 02:12* 字数 4330 阅读 86819评论 89喜欢 339赞赏 7 在Android Studio代码调试一文中 ...

  2. ffmpeg编译android,FFMPEG Android(2) 编译编译静态ffmpeg可执行文件

    基础编译,请参考上一篇文章: http://blog.csdn.net/muwesky/article/details/55259945 如果想编译静态ffmpeg可执行文件,编译脚本如下: #!/b ...

  3. 自己动手编译Android 8.0源码

    转载自:http://blog.csdn.net/dl6655/article/details/78869501 安装git并且配置 sudo apt-get install git git conf ...

  4. 自己动手调试Android源码(超简单)

    在自己动手编译Android最新源码一文中,我们为自己编译了一份最新的Android源码.很多时候,我们编译源码的目的不仅仅是尝试一番,而是希望对其进行调试,并修改源码,看看其中一些关键机制的运行原理 ...

  5. android ffmpeg编译so,Android FFmpeg学习(一),将FFmpeg编译成so文件

    前言 搜索了一堆编译so文件的方法,一直遇到问题,最后终于搞好了. 再次非常感谢<使用Android Studio开发FFmpeg的正确姿势>一文对我的帮助,让我成功编译出了so. 编译环 ...

  6. Unbuntu环境编译 Android平台可用ffmpeg(带三方库fdk-aac和lame)

    零.准备 编译环境:Ubuntu16.0.4 NDK版本:android-ndk-r21c-linux-x86_64 ffmpeg版本:4.4.1 fdk-aac: fdk-aac-2.0.2 lam ...

  7. 编译Android下可用的全平台FFmpeg(包含libx264与libfdk-aac)

    请尊重原创,转载请注明出处:http://blog.csdn.net/mabeijianxi/article/details/74544879 源码或工具版本: ndk :r14 FFmpeg 版本: ...

  8. 自己动手编译最新Android源码及SDK(Ubuntu)

    在Android Studio代码调试一文中,简单的介绍了代码调试的一些技巧.现在我们来谈谈android源码编译的一些事.(俺认为,作为android developer人人都应该有一份自己Andr ...

  9. Mac 平台 Android FFmpeg 编译与集成实践

    文章目录 FFmpeg 是什么 为什么要学 FFmpeg 开发 FFmpeg 编译 1. 编译环境准备 2. FFmpeg 环境配置 3. 完整的脚本 4. FQA 编译小结 在Android Stu ...

  10. 编译Android下可执行命令的FFmpeg

    请尊重原创,转载请注明出处:http://blog.csdn.net/mabeijianxi/article/details/72904694 本人环境与工具: ndk:r14 FFmpeg版本: 3 ...

最新文章

  1. ​老男孩教育每日一题-第105天-Linux如何设置每天凌晨三点重启nginx服务
  2. How to use tcpdump with examples
  3. 联合检测和跟踪的MOT算法解析(含MOT17 No.1等多个榜前算法)
  4. 导入xlsx,文件到sqlite3数据库
  5. SSH Secure Shell显示GCC编译错误信息乱码解决方法
  6. laytpl语法_浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
  7. NetBeans 时事通讯(刊号 # 143 - Apr 19, 2011)
  8. c语言api接口文档模板,apiDoc生成接口文档,不费吹灰之力
  9. Java电商秒杀系统性能优化(八)——流量削峰技术-削峰填谷之神级操作
  10. 京东颜色html,京东m.jd站点静态页实现(首页)H5
  11. 数据库面试——锁的12连问,赶紧收藏!
  12. linux下也有很多好游戏
  13. 前端Photoshop切图快速入门
  14. 如何提高自己的执行力?只需要这一个方法!
  15. svn commit svn: E170001: Authorization failed
  16. ai人工智能_11条人工智能原则
  17. 斗鱼TV如何默认HTML,斗鱼直播怎么设置标签
  18. Phpspreadsheet 中文文档(四) 创建电子表格+档案格式
  19. 这些面试的“标准答案”,你都知道吗?
  20. HTML常用表格及表单属性

热门文章

  1. 国内大公司的开源项目一览表
  2. 微信小程序实现秒杀、拼团、团购等效果
  3. 美赛O奖论文翻译-2015埃博拉病毒
  4. 数据原理——1、ChIP-seq
  5. vecm matlab,VECM是什么?
  6. endnote参考文献排版_基于国家标准的 EndNote 输出样式模板
  7. 第一篇 Object-C快速入门
  8. matlab 对数函数表示,matlab对数函数怎么表示
  9. xvidcore.dll not found视频播放问题
  10. java web 播放器代码_各种网页播放器代码大全