ffmpeg-4.0.2版本中ffplay播放器在vs下的编译

时间:2024-03-24 18:18:22

参考了大佬的博客,自己也做一些补充。

1.如何配置我们的工程中的include目录,lib目录?
添加工程的头文件目录:
当前工程–>右键“属性”–>“配置属性”–>“C/C++”–>“常规”–>“附加包含目录”==>添加上该工程的头文件 存放目录即可。

添加文件引用的lib静态库路径:
当前工程–>右键“属性”–>“配置属性”–>“链接器”–>“常规”–>“附加库目录”==>添加上该工程的lib文件存放目录即可。

添加工程引用的lib文件名:
当前工程–>右键“属性”–>“配置属性”–>“链接器”–>“输入”–>“附加依赖项”==>添加上该工程的lib文件名即可。

2.VS在Debug编译模式下如何生成exe文件?
VS在Debug模式下不能生成exe文件,需要借助Visual Studio Installer。

相信很多想要学习播放器开发的小伙伴都知道ffplay,但是却不知道如何在vs2013下去编译,虽然网上已经有了一些教程,但是都不完整,或者ffmpeg的版本太老,所以就有了今天这篇文章。

好了,废话少说,直接上干货。

第一步下载ffmpeg源码,下载地址http://ffmpeg.org/download.html,具体界面如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

第2步,下载ffmpeg的二进制版本,有些小伙伴可能会问为什么还要下载二进制,直接编译源代码不可以吗,当然可以,如果你不怕麻烦,你怎么都可以,但是我教你的方法是简单有效的方法,要不要学,嘿嘿。

输入如下网址:https://ffmpeg.zeranoe.com/builds/

界面如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

然后下载win32下的Shared和Dev两个版本,就可以,win64同理,所以,我们这里以win32为例。下载完成后,按照下面的方式重新组织你的ffmpeg文件,具体如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

在我这里有两个版本,x86代表32位,把所有的头文件放入include,lib和exe文件放入lib目录,bin目录你们可以不要。

第3步下载SDL库,我们这里也是用最新的版本SDL2-2.0.8,输入网址:http://www.libsdl.org/download-2.0.php

具体界面如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

我们下载32位windows版本就可以,然后分别按照include和lib目录组织好自己的文件。

第4步,我们开始建立一个vs2013控制台工程,如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

点击完成,如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

好了,现在我们已经创建了一个vs2013控制台工程,但是现在没有任何文件,现在我们开始为它添加需要的文件,具体如下:

1)将ffmpeg-4.0.2\ffmpeg-4.0.2\fftools下的三个文件拷贝到自己的工程,三个文件如下:

cmdutils.h

cmdutils.c

ffplay.c

2) 将ffmpeg-4.0.2\ffmpeg-4.0.2\compat\avisynth\avs下的config.h文件拷贝到自己的工程

工程目录文件如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

将所有文件添加到项目中,具体如下:

右键项目名称,添加-现有项,然后选择我们拷贝的4个源文件,效果如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

3)配置我们的工程中的include目录,lib目录

include目录添加两个新项

D:\ffmpeg\x86\include

D:\SDL2-2.0.8\include

lib目录同样添加两个新项

D:\ffmpeg\x86\lib

D:\SDL2-2.0.8\lib\x86

然后配置依赖项,添加lib如下:

swscale.lib
swresample.lib
postproc.lib
avutil.lib
avformat.lib
avfilter.lib
avdevice.lib
avcodec.lib
SDL2.lib
SDL2main.lib

好了现在配置完成,下面,我们开始编译。

4)编译项目,错误具体如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

只需要注释掉这行代码,就可以,同时也要注释掉另外两行代码,具体如下:

//#include "compat/va_copy.h"

//#include "libavresample/avresample.h"

//#include "libavutil/libm.h"

5)再次编译,具体如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

处理方法:

注释掉print_program_info和print_all_libs_info内部的所有代码,具体如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

6)再次编译,具体如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

处理方法:

注释掉print_buildconf内部所有的代码,具体如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

7)再次编译,具体如下:

处理方法:

在C++预处理其中,添加 _CRT_SECURE_NO_WARNINGS,具体如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

8)再次编译,具体如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

处理方法:

屏蔽SDL检测,具体如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

将SDL检测改为否,就可以。

9)再次编译,具体如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

处理方法:

在config.h中添加如下代码:

#define FFMPEG_DATADIR "D:\\ffmpeg-4.0.2\\ffmpeg-4.0.2"

注意:

D:\\ffmpeg-4.0.2\\ffmpeg-4.0.2是下面的源码目录,不是编译好的ffmpeg目录,目录内容具体如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

10) 再次编译,具体如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

处理方法:

在cmdutils.c中添加如下代码:

#define snprintf _snprintf

11)再次编译,具体如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

到此,编译已经完成,然后只需要将相应的ffmpeg和SDL的相关DLL拷贝到exe所在目录即可,具体如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

12)测试ffplay-vs.exe

首先打开cmd,并进入到ffplay-vs.exe所在目录,具体如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

运行程序如下:

ffplay-vs.exe D:\d.mp4

运行效果如下:

ffmpeg-4.0.2版本中ffplay播放器在vs2015下的编译

到此,全部完成,是不是很简单,各位小伙伴,自己动手试试。