欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在vs2017中通过CMake 配置ffmpeg 环境

程序员文章站 2022-03-28 20:21:57
...

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

在vs2017中通过CMake 配置ffmpeg 环境

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

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

在vs2017中通过CMake 配置ffmpeg 环境

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

在vs2017中通过CMake 配置ffmpeg 环境

解压之后,有3个文件夹

在vs2017中通过CMake 配置ffmpeg 环境

配置CMakeLists.txt

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

在vs2017中通过CMake 配置ffmpeg 环境这个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文件下

在vs2017中通过CMake 配置ffmpeg 环境

凡是以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

在vs2017中通过CMake 配置ffmpeg 环境

到此,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;
}

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

在vs2017中通过CMake 配置ffmpeg 环境

这里做个解释

extern c

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

av_version_info()

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

相关标签: Android NDK