热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android开发Windows环境下编译FFMPEG源码

1.简介之前有两篇文章讲到如何在windowsPC端使用FFMPEG命令行程序。FFMPEG在windows上的安装FFMPEG命令行工具的使用但是我想要在android开发时使用

1.简介


之前有两篇文章讲到如何在windowsPC端使用FFMPEG命令行程序。

  • FFMPEG 在windows上的安装
  • FFMPEG命令行工具的使用

但是我想要在android开发时使用FFMPEG的功能又该怎么办?所以就需要编译FFMPEG,然后才能使用。这才有了这篇文章。

1.先讲思路,2.后讲具体流程!

但是首先有个问题就是我的电脑是windows系统,如何编译FFMPEG? 看网上的许多例子都是Linux和MAC系统。实在是看的我两眼发萌。

幸好有解决办法,那就是在Windows电脑上装一个MinGW。因为WIndows没有编译环境,只有装了这个(类似或CygWin)才有编译环境,我们才能进行编译。

MinGW是什么?

  • MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时(C Runtime)库。
  • 允许你在Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。
  • MSYS是MinGW的一个子系统,是一套运行在Windows上的bash,也就是运行在Win上的Linux Terminal [1]。其实就是在Win上使用Linux的命令行进行操作,可以代替cmd来使用。对一些GNU的开源软件,MSYS可能是必需的,因为它们通常需要./configure然后make才能运行。我们将MSYS和MinGW配合使用就可以打造出一个Win下的GNU命令行终端和编译系统。
  • 下载安装MinGW时,自动里面会有MSYS。

有了编译环境,是不是要有东西可以编译,所以就需要下载FFMPEG源码。

有了源码,还不能直接编译,因为编译时要执行一个脚本文件,而这个脚本文件里面有NDK的配置,所以我们还需要下载一个NDK。

所以我们总共需要下载的东西有:

  • NDK      https://developer.android.google.cn/ndk/downloads/    版本r14
  • MInGW     https://sourceforge.net/projects/mingw/files/     
  • FFMPEG源码     https://ffmpeg.org/download.html   版本3.3.8(HilBert)

接下来讲具体流程,如何下载?如何安装?如何配置环境变量,如何检验配置成功?最终到如何编译使用?

 

2.NDK的配置


至于为什么不从androidStudio直接下载NDK,怎么说呢?我自己也测试过,总是有问题,少东西,最终导致编译不成功,导致我之前放弃过要编译FFMPEGE。后来迎难而上,终于编译成功。一定要注意一些不为人知的小细节,不然,就算按着流程来也可能最终导致编译失败。你有福了,幸好看了我这篇文章,我将会告诉你不为人知的小细节,相信你一定可以编译FFMPEG成功。

1.我下载ndk压缩包到D盘的一个文件夹,并解压缩了。

android开发-Windows环境下编译FFMPEG源码

2.配置ndk环境变量path,在其中加入

;D:\NDK\android-ndk-r14b;

3.检验是否配置成功

在cmd命令行输入   ndk-build    ,出现如下情况,则表示配置成功。

android开发-Windows环境下编译FFMPEG源码

 

3.MinGW下载安装配置


1.下载

android开发-Windows环境下编译FFMPEG源码

2.得到一个.exe文件(不管你放在哪),点开,然后选择安装位置,我是安装到了D盘的MinGW文件夹

android开发-Windows环境下编译FFMPEG源码

3.选择了安装位置之后,需要选择需要安装的组件,如上图,我全部勾选,然后执行安装。

执行安装点击左上角的installation,然后点击apply change

4.安装之后文件夹中的情况:

android开发-Windows环境下编译FFMPEG源码

5.配置环境变量path,在其中加入两个路径:

;D:\MinGW\bin;

D:\MinGW\msys\1.0\bin

6.检验配置是否成功?出现下图,即表示配置成功

android开发-Windows环境下编译FFMPEG源码

7.在msys/1.0/ 有一个msys.bat 的文件,待会下面编译脚本文件时是打开它,而不是cmd。

android开发-Windows环境下编译FFMPEG源码

 

3.FFMPEG源码下载,及修改configure文件,及创建build_android.sh脚本文件


1.我下载了ffmpeg源码压缩包,并解压到了一个文件夹。

android开发-Windows环境下编译FFMPEG源码

2.进入ffmpeg源码文件夹,修改configure文件:

# 原来的配置内容:
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)'

3.新建一个 build_android.sh 脚本文件 , 用于配置及编译使用 (名字不唯一)

android开发-Windows环境下编译FFMPEG源码

4. build_android.sh 脚本文件里面的内容如下:你也可以百度有其它的内容,这个不唯一

#!/bin/bash
#自己修改对应的路径,要配置到环境变量中去
NDK=D:/NDK/android-ndk-r14b
#android4.9 对应的SDK在20左右,所以你的platforms应该选择小于20的,因为向前兼容,大于20的会有问题
SYSROOT=$NDK/platforms/android-18/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64

function build_one
{
./configure \
    --prefix=$PREFIX \
    --enable-shared \
    --disable-static \
    --disable-doc \
	--enable-cross-compile \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --target-os=linux \
    --arch=arm \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one

read -p "Press any key to continue."

5.打开 msys.bat 而不是cmd.

进入到ffmpeg源码文件夹

android开发-Windows环境下编译FFMPEG源码

然后输入

$chmod 777 build_android.sh

等待一段时间,然后输入

$make

等待两段时间,然后输入

$make install

 

6.编译完成,会在ffmpeg源码文件夹中生成一个android文件

其/android/arm/lib目录下的so库文件就是能够在Android上运行的so库。

android开发-Windows环境下编译FFMPEG源码

 

至此,编译结束,得到了so库,大功告成!

如果总是编译失败,不妨推倒重来,多吸取失败经验,一定会成功的!

android开发-Windows环境下编译FFMPEG源码

 

 

 


推荐阅读
  • Android系统启动过程分析一、Android平台架构首先贴一张Android系统架构图方便理解整个Android架构,这可以让我们从整体上对整个启动流程有个大概认知。可以看出整 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Mono为何能跨平台
    概念JIT编译(JITcompilation),运行时需要代码时,将Microsoft中间语言(MSIL)转换为机器码的编译。CLR(CommonLa ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • 初识java关于JDK、JRE、JVM 了解一下 ... [详细]
  • 开发笔记:MyBatis学习之逆向工程
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了MyBatis学习之逆向工程相关的知识,希望对你有一定的参考价值。转载:http://w ... [详细]
author-avatar
世界和平啊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有