相信很多想要学习播放器开发的小伙伴都知道ffplay,但是却不知道如何在vs2013下去编译,虽然网上已经有了一些教程,但是都不完整,或者ffmpeg的版本太老,所以就有了今天这篇文章。
好了,废话少说,直接上干货。
第一步下载ffmpeg源码,下载地址http://ffmpeg.org/download.html,具体界面如下:
第2步,下载ffmpeg的二进制版本,有些小伙伴可能会问为什么还要下载二进制,直接编译源代码不可以吗,当然可以,如果你不怕麻烦,你怎么都可以,但是我教你的方法是简单有效的方法,要不要学,嘿嘿。
输入如下网址:https://ffmpeg.zeranoe.com/builds/
界面如下:
然后下载win32下的Shared和Dev两个版本,就可以,win64同理,所以,我们这里以win32为例。下载完成后,按照下面的方式重新组织你的ffmpeg文件,具体如下:
在我这里有两个版本,x86代表32位,把所有的头文件放入include,lib和exe文件放入lib目录,bin目录你们可以不要。
第3步下载SDL库,我们这里也是用最新的版本SDL2-2.0.8,输入网址:http://www.libsdl.org/download-2.0.php
具体界面如下:
我们下载32位windows版本就可以,然后分别按照include和lib目录组织好自己的文件。
第4步,我们开始建立一个vs2013控制台工程,如下:
点击完成,如下:
好了,现在我们已经创建了一个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文件拷贝到自己的工程
工程目录文件如下:
将所有文件添加到项目中,具体如下:
右键项目名称,添加-现有项,然后选择我们拷贝的4个源文件,效果如下:
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)编译项目,错误具体如下:
只需要注释掉这行代码,就可以,同时也要注释掉另外两行代码,具体如下:
//#include "compat/va_copy.h"
//#include "libavresample/avresample.h"
//#include "libavutil/libm.h"
5)再次编译,具体如下:
处理方法:
注释掉print_program_info和print_all_libs_info内部的所有代码,具体如下:
6)再次编译,具体如下:
处理方法:
注释掉print_buildconf内部所有的代码,具体如下:
7)再次编译,具体如下:
处理方法:
在C++预处理其中,添加 _CRT_SECURE_NO_WARNINGS,具体如下:
8)再次编译,具体如下:
处理方法:
屏蔽SDL检测,具体如下:
将SDL检测改为否,就可以。
9)再次编译,具体如下:
处理方法:
在config.h中添加如下代码:
#define FFMPEG_DATADIR "D:\\ffmpeg-4.0.2\\ffmpeg-4.0.2"
注意:
D:\\ffmpeg-4.0.2\\ffmpeg-4.0.2是下面的源码目录,不是编译好的ffmpeg目录,目录内容具体如下:
10) 再次编译,具体如下:
处理方法:
在cmdutils.c中添加如下代码:
#define snprintf _snprintf
11)再次编译,具体如下:
到此,编译已经完成,然后只需要将相应的ffmpeg和SDL的相关DLL拷贝到exe所在目录即可,具体如下:
12)测试ffplay-vs.exe
首先打开cmd,并进入到ffplay-vs.exe所在目录,具体如下:
运行程序如下:
ffplay-vs.exe D:\d.mp4
运行效果如下:
到此,全部完成,是不是很简单,各位小伙伴,自己动手试试。