介绍
FFmpeg是一个强大的音视频编解码开源库。目前(2022/2/9)FFmpeg版本已经到了4+,支持多种平台。本篇文章将讲解如何在Visual Studio上搭建FFmpeg环境并编写FFmpeg的HelloWorld程序。
准备工作
在此之前,大家先做好心理准备吧。在环境搭建过程中会遇到相当多的坑,FFmpeg的学习光是这一步就劝退很多人了。坚持下来吧。
这里使用的是Visual Studio 2013,FFmpeg使用的是4.3版本。FFmpeg分为static(静态库)、shared(动态库)和dev(开发者)三个版本。FFmpeg的压缩包可以到我的Gitee上下载。
解压和创建工程
首先把FFmpeg的压缩文件解压出来,压缩文件分为32位版本和64位版本,这里解压的是32位版本的。
接下来在Visual Studio上创建一个Win32控制台工程。
配置工程
回到刚刚解压出来的ffmpeg-4.3.1-win32-dev文件夹,把里面的include和lib文件夹复制到此工程目录下。
点击项目–>属性,打开配置页面。
找到包含目录选项,点击编辑。
把刚刚项目目录下的include文件夹包含进来。
接着找到附加库目录,点击编辑。
把lib文件夹添加进来。
找到附加依赖项,点击编辑。
打开刚刚的lib文件夹,里面所有.lib文件的名字都添加进来,文件名用分号隔开。
avcodec.lib;avdevice.lib;avfilter.lib;avformat.lib;avutil.lib;postproc.lib;swresample.lib;swscale.lib
然后一定要记得点击应用,不然又得重来了。
终于到配置的最后一步了。还记得刚刚解压的ffmpeg-4.3.1-win32-shared文件夹吧?进到bin文件夹,把里面的.dll文件复制到工程的Debug文件夹里(也就是生成exe的地方)。程序在运行的时候会动态加载dll库文件,它需要和exe文件放在同一个文件夹下。
至此,配置工作就算是完成了。不放心的朋友再回去核对一下。
编写程序
主程序代码相当简单,就是打印一下FFmpeg的配置信息。
#include "stdafx.h"
#include <iostream>
extern "C"
{
#include "libavformat/avformat.h"
};
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
cout << avcodec_configuration() << endl;
return 0;
}
如果打印了此信息,FFmpeg环境搭建就算是成功了·!建议大家把这个工程备份下来当做模板工程。
可能遇到的问题
1.出现找不到dll文件,是因为没有把相应的dll文件复制到exe所在的文件夹,复制过去就可以了。
2.提示无法解析的外部符号”和“该符号在函数_wmain 中被引用,是因为FFmpeg的库版本和运行版本不一致,比如32位运行版本使用了64位FFmpeg库。本文使用的是32位的FFmpeg库。运行版本也是32位。
3.#include “libavformat/avformat.h”,包含FFmpeg相关头文件时报错。首先可能是之前的include文件夹设置不正确,其次可能是没加extern “C”{},FFmpeg使用的c语言,而我们的工程是c++,需要extern "C"来兼容C语言。
extern "C"
{
//#include ffmpeg的头文件
};
4.如果还是难以调试成功,那就到我的Gitee上下载模板工程吧。
最后
本篇文章讲解了如何在Visual Studio上搭建FFmpeg环境。下一篇文章我们来学习如何使用FFmpeg解封装视频。
参考文章
《配置visual studio中的ffmpeg开发环境》
《FFMPEG学习:三种版本(static、shared、dev)和常用命令集》
《visual studio2017 添加dll库》
《FFmpeg 切换新的版本后,编译报LNK2019 无法解析的外部符号 _av_register_all》
《关于“无法解析的外部符号”和“该符号在函数_wmain 中被引用”的有关问题》