在vs2017中通过CMake 配置ffmpeg 环境

ffmpeg工具包和本篇测试代码在如下

链接:https://pan.baidu.com/s/1zB9r5WwuTMIPNMlYl5HlvA 
提取码:5ndl 

先用CMkae创建一个项目,之后在该项目中配置ffmpeg

项目创建成功后,解压ffmpeg工具包

解压之后,有3个文件夹

配置CMakeLists.txt

在创建的项目中,找到CMakeLists.txt

这个CMakeLists.txt类似于java中的build.gradle文件,功能是告知Cmake.exe工具要如何去构建当前项目

1.先配置ffmpeg头文件的根目录

我们想要使用ffmpeg中提供的函数,那么就要确定头文件的位置。ffmpeg中的头文件都是放在include中,因此,我们可以在CMakeLists.txt中配置include的路径。配置代码的第5行

cmake_minimum_required (VERSION 3.8)

#能够在 编码的时候 使用ffmpeg的函数
# 设置头文件的查找位置
include_directories("D:/ffmpeg-20180813-551a029-win64-dev/include")

# 将源代码添加到此项目的可执行文件。
add_executable (CMakeProject4 "CMakeProject4.cpp" "CMakeProject4.h")

2.配置ffmpeg库的根目录

除了配置头文件之外,ffmpeg自身的函数也调用了某些库,这些库都放在lib文件夹里,因此我们还要配置这些库的根目录

库的配置看第8行

cmake_minimum_required (VERSION 3.8)

#能够在 编码的时候 使用ffmpeg的函数
# 设置头文件的查找位置
include_directories("D:/ffmpeg-20180813-551a029-win64-dev/include")

# 设置库的查找目录 jar
link_directories("D:/ffmpeg-20180813-551a029-win64-dev/lib")

# 将源代码添加到此项目的可执行文件。
add_executable (CMakeProject4 "CMakeProject4.cpp" "CMakeProject4.h")

3.设置我们程序将要链接的ffmpeg库

源代码变为可执行程序,需要经过编译-链接,两个步骤。编译好理解,就是将源代码翻译成机器指令,而链接是将其他编译好的机器指令和我们自己的机器指令进行结合.,这里的其他编译好的机器指令其实指的就是库,因为库中的代码都是经过编译的。

因为我们的程序引用到了ffmpeg中的代码,所以在链接的时候也要链接ffmpeg中的库,在lib文件下

凡是以lib结尾的文件都是ffmpeg的库,我们在CMakeLists.txt中,看16行,将这些库都引入

#设置编译链接的库 ffmpeg

cmake_minimum_required (VERSION 3.8)

#能够在 编码的时候 使用ffmpeg的函数
# 设置头文件的查找位置
include_directories("D:/ffmpeg-20180813-551a029-win64-dev/include")

# 设置库的查找目录 jar
link_directories("D:/ffmpeg-20180813-551a029-win64-dev/lib")

# 将源代码添加到此项目的可执行文件。
add_executable (CMakeProject4 "CMakeProject4.cpp" "CMakeProject4.h")

#设置编译链接的库 ffmpeg
target_link_libraries( CMakeProject4 avutil avcodec avfilter  avdevice avformat postproc swresample )

这里需要注意的是target_link_libraries 中的 CMakeProject4  和add_executable 中的CMakeProject4 名字要一样,这表示要将这些库都集成到add_executable 生成的CMakeProject4.exe这个可执行文件中。

4将ffmpeg的dll拷贝到C:\Windows\System32

最后将dll中的所有dll文件拷贝到C:\Windows\System32

到此,ffmpeg的环境算是配置完成了,接下来,就通过代码来验证下,我们是否配置成功

完整测试代码如下

#include "CMakeProject4.h"

using namespace std;
extern "C" {
	#include <libavcodec/avcodec.h>
	#include <libavformat/avformat.h>
}


int main()
{
	//输出版本号
	cout << av_version_info() << endl;
	cout << "Hello CMake。" << endl;
    system("pause");
	return 0;
}

看到如下结果,说明配置成功

这里做个解释

extern c

由于ffmpeg是纯C代码写的,但当前我们的项目环境又是C++,在C++中引入C语言的头文件,一定要将.h用extern C包裹,包裹后,编译在编译头文件中的内容时,才会以C语言的标准去编译头文件,如果不用extern c 包裹,那么编译会以C++的标准编译头文件。

av_version_info()

是ffmpeg中的一个函数,若有输出内容,说明我们配置成功了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值