一步步实现windows版ijkplayer系列文章之一——Windows10平台编译ffmpeg 4.0.2,生成ffplay
一步步实现windows版ijkplayer系列文章之二——Ijkplayer播放器源码分析之音视频输出——视频篇
一步步实现windows版ijkplayer系列文章之三——Ijkplayer播放器源码分析之音视频输出——音频篇
一步步实现windows版ijkplayer系列文章之四——windows下编译ijkplyer版ffmpeg
一步步实现windows版ijkplayer系列文章之五——使用automake一步步生成makefile
一步步实现windows版ijkplayer系列文章之六——SDL2源码分析之OpenGL ES在windows上的渲染过程
一步步实现windows版ijkplayer系列文章之七——终结篇(附源码)

一步步实现windows版ijkplayer系列文章之一——Windows10平台编译ffmpeg 4.0.2,生成ffplay

最近想研究下ffplay的代码,学习代码是枯燥无味的,也是抽象的,学习一个系统或者软件之前,好的入门方法是先把系统搭建起来,或者把软件编译出来,直观的操作一下相关的功能,由表入里,熟悉功能之后,在慢慢深入代码,由现象看到本质,才能理解的更加深刻。

ffmpeg目前最新的代码是4.0.2.编译ffmpeg代码之前需要做一些准备工作。

安装编译环境

网上有两种windows下的gcc编译环境可供选择,一个是MinGW,另外一个是cygwin,二者的区别可以参考一个帖子。其中注意有一点是使用cygwin编译出来的程序都要依赖Cygwin1.dll,因此决定使用WinGW编译ffmpeg。

安装minGW installation manager

下载链接

下载之后安装,打开主界面,安装下面的组件。

安装MinGWMSYS

MSYS即Minimal GNU(POSIX)system on Windows,是一个小型的GNU环境,包括基本的bash,make等等。是Windows下最优秀的GNU环境,它也可以通过minGW installation manager进行安装。

打开minGW installation manager,按照下图进行勾选:


点击Installation->Apply Changes 进行安装基本包。

编译ffmpeg

编译ffmpeg是很简单的,但默认编译ffmpeg是不带ffplay的。需要做额外的操作。

yasm

yasm是汇编编译器,因为ffmpeg中为了提高效率用到了汇编指令,比如MMX和SSE。因此需要安装这个工具。下载链接

我编译的是32位的ffmpeg,所以下载“Win32.exe”。下载完成之后将yasm-1.3.0-win32.exe重命名为yasm.exe,放到C:\MinGW\msys\1.0\bin下面。

nasm

下载nasm,并将nasm.exe拷贝到C:\MinGW\msys\1.0\bin下面。
链接

pkg-config

pkg-config是一个辅助的配置、链接工具,可以方便的支持gcc自动配置。

下载链接,下载完之后将bin下面的pkg-config.exe拷贝到C:\MinGW\msys\1.0\bin下面。

SDL2

下载SDL2,解压之后,把目录下lib,bin.include,share下面的内容拷贝到C:\MinGW\msys\1.0的对应目录下,注意,是全部。

ffmpeg-4.0.2

把下载的ffmpeg源码包放到home目录下面,打开C:\MinGW\msys\1.0下的msys.bat,会自动在目录C:\MinGW\msys\1.0下生成一个home目录,进入ffmpeg源码根目录,创建build文件夹,进入文件夹,执行下面的命令:

$ ../configure --disable-static --enable-shared --enable-gpl --enable-version3 --enable-pthreads --enable-sdl

gdb debug用下面的命令:

$ ./configure --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl --enable-debug=3 --disable-optimizations --disable-mmx --disable-s tripping

成功之后,执行make

make

但是会报如下错误:

"ws2tcpip.h is not compatible with winsock.h. Include winsock2.h instead."

字面意思是某个文件包含了winsock.h,但是应该包含winsock2.h。找了半天,最后想到一个办法,把C:\MinGW\include下面的winsock.h删掉,再次执行make命令,最后发现是ptw32_errno.h这个文件包含了winsock.h,将其改为winsock2.h, 再次make,成功。

最后make install

make install

运行ffplay

ffplay.exe ed_1024_512.mp4

参考

https://www.cnblogs.com/tocy/p/windows_mingw_compile_ffmpeg_with_ffplay.html

一步步实现windows版ijkplayer系列文章之一——Windows10平台编译ffmpeg 4.0.2,生成ffplay的更多相关文章

  1. 一步步实现windows版ijkplayer系列文章之七——终结篇(附源码)

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  2. 一步步实现windows版ijkplayer系列文章之六——SDL2源码分析之OpenGL ES在windows上的渲染过程

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  3. 一步步实现windows版ijkplayer系列文章之五——使用automake生成makefile

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  4. 一步步实现windows版ijkplayer系列文章之四——windows下编译ijkplyer版ffmpeg

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  5. 一步步实现windows版ijkplayer系列文章之三——Ijkplayer播放器源码分析之音视频输出——音频篇

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  6. 一步步实现windows版ijkplayer系列文章之二——Ijkplayer播放器源码分析之音视频输出——视频篇

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  7. Windows Shell Extension 系列文章

    Windows Shell Extension 系列文章 http://www.codeproject.com/Articles/512956/NET-Shell-Extensions-Shell-C ...

  8. Windows Azure Platform 系列文章目录

    Windows Azure Platform (一) 云计算的出现 Windows Azure Platform (二) 云计算的分类和服务层次 Windows Azure Platform (三) ...

  9. 探索Windows命令行系列(7):通过命令编译C#类和Java类

    1.编译 C# 类 1.1.C# 编译工具 1.2.编译一个 C# 类 1.3.编译多个 C# 类 2.编译 Java 类 2.1.Java 编译工具 2.2.编译 Java 类 3.组合命令符 4. ...

随机推荐

  1. 【助教】浅析log4j的使用

    有不少童鞋私信我一些在写代码时候遇到的问题,但是无法定位问题出在哪里,也没有日志记录,实际上,写日志是开发项目过程中很重要的一个环节,很多问题都可以从日志中找到根源,从而定位到出错位置,为解决问题提供 ...

  2. createobjbyreplace(str,arr) js替换方法保存

    <script> function createobjbyreplace(str,arr){ var len = arr.length; for(var i=0; i<len; i+ ...

  3. [转帖]LNMP组件安装

    https://lnmp.org/install.html 系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian/Deepin/Aliyun/Amazon/M ...

  4. sessionStorage & localStorage in-depth

    sessionStorage & localStorage in-depth Web Storage API https://developer.mozilla.org/en-US/docs/ ...

  5. 我为什么放弃MySQL?选择了MongoDB

    最近有个项目的功能模块,为了处理方便,需要操作集合类型的数据以及其他原因.考虑再三最终决定放弃使用MySQL,而选择MongoDB. 两个数据库,大家应该都不陌生.他们最大的区别就是MySQL为关系型 ...

  6. java 前台使用枚举方法(一)

    枚举值封装: http://blog.csdn.net/hanjun0612/article/details/72845960 一  基本类型 这里接着说前台调用枚举值. 首先,controller层 ...

  7. sqlbulkcopy 批量更新 数据库

    转载: http://blog.csdn.net/wangzh300/article/details/7382506 private static void DataTableToSQLServer( ...

  8. maven上传jar包到nexus私服后的存放路径 以及 使用IDEA上传jar包的步骤

    maven上传jar包到nexus私服的方法,网上大神详解很多,那么上传后的jar包存放到哪里了呢? 在下使用nexus3.2.1版本,在本地搭建了私服,使用maven上传jar包.最后结果如下: 点 ...

  9. Django_ KindEditor 插件使用

    KindEditor  富文本编辑器插件 目的及原理: 更便捷的在前端页面上实现用户的文本编辑操作, 本质上就是对标签的样式进行封装和事件预处理, 常规操作都可以通过直接的引入即可实现, 但是对于存在 ...

  10. 关于找List的中间Node

    初始值 slow = fast = head; 如果使用 fast && fast->next && fast->next->next 作为快慢指针循 ...