热门标签 | 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源码

 

 

 


推荐阅读
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • Nginx 反向代理配置与应用指南
    本文详细介绍了 Nginx 反向代理的配置与应用方法。首先,用户可以从官方下载页面(http://nginx.org/en/download.html)获取最新稳定版 Nginx,推荐使用 1.14.2 版本。下载并解压后,通过双击 `nginx.exe` 文件启动 Nginx 服务。文章进一步探讨了反向代理的基本原理及其在实际应用场景中的配置技巧,包括负载均衡、缓存管理和安全设置等,为用户提供了一套全面的实践指南。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 在Ubuntu系统中配置Python环境变量是确保项目顺利运行的关键步骤。本文介绍了如何将Windows上的Django项目迁移到Ubuntu,并解决因虚拟环境导致的模块缺失问题。通过详细的操作指南,帮助读者正确配置虚拟环境,确保所有第三方库都能被正确识别和使用。此外,还提供了一些实用的技巧,如如何检查环境变量配置是否正确,以及如何在多个虚拟环境之间切换。 ... [详细]
  • 1. 设置用户密码:使用 `slappasswd` 工具生成加密密码,确保账户安全。具体步骤如下:输入命令 `slappasswd -s NewPassword`,系统将提示重新输入新密码,并生成加密后的哈希值 {SSHA}xxxxxxxxxxxxxxxxx。2. 编写配置文件:编辑 `vildapus` 配置文件,添加必要的用户账户信息,以确保新用户能够顺利登录系统。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 本文介绍了如何在 Windows 系统上利用 Docker 构建一个包含 NGINX、PHP、MySQL、Redis 和 Elasticsearch 的集成开发环境。通过详细的步骤说明,帮助开发者快速搭建和配置这一复杂的技术栈,提升开发效率和环境一致性。 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • 二叉树的直径是指树中任意两个叶节点之间最长路径上的节点数量。本文深入解析了计算二叉树直径的算法,并提出了一种优化方法,以提高计算效率和准确性。通过详细的案例分析和性能对比,展示了该优化算法在实际应用中的优势。 ... [详细]
  • 字节码开发笔记:深入解析与应用技巧 ... [详细]
  • 本文源自极分享,详细内容请参阅原文。技术债务如同信用卡负债,随着时间推移,修复成本会越来越高,因此程序员必须对此有深刻认识。此外,团队应致力于培养一种持续维护和优化代码的文化,以减少技术债务的累积。 ... [详细]
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社区 版权所有