Spout2是一个用于Windows系统的视频帧共享系统,允许应用程序以类似Mac的Syphon的方式共享OpenGL纹理,Spout2支持Direct9、Direct11、Direct12和OpenGL的纹理数据共享。
我们可以基于Spout2进行开发,将我们想要的一些视频帧结合OBS的Spout2插件传递到OBS上进行直播。
Github地址:https://github.com/leadedge/Spout2
官网地址:https://leadedge.github.io/
1 Windows上编译Spout2
我们可以在Github项目的Release下载Spout2的源码,这里以写文章时最新的Spout 2.007.010为例,下载源码
下载上述的Source code.zip包。解压上述的zip包,然后在根目录下我们可以看到Building the libraries.pdf这个文件,这个文件中有这么一段话
Visual Studio 2017 and 2022 projects are available in the “SPOUTSDK\SpoutGL” folder to build the Spout SDK as a dll.
Equivalent projects can also be found in the “SPOUTSDK\SpoutLibrary” folder to create a Ccompatible dll that can be used with other compilers. Pre-built binaries for 32 bit and 64 bit are also available in the “SPOUTSDK\SpoutLibrary\Binaries" folder.
However, all the libraries can be built using Cmake. (https://cmake.org). This may be preferable if you require dll or static libraries or if you are using a compiler other than Visual Studio.
就是说在SPOUTSDK\SpoutGL这个文件中已经使用了Visual Studio进行了项目组织,直接可以编译成dll。而SPOUTSDK\SpoutLibrary中则是可以被其他编译器编译的兼容性dll。
如果你需要将Spout2作为静态库链接进你的项目,那么就去编译SPOUTSDK\SpoutGL这个项目。如果没有特别要求,那么直接编译SPOUTSDK\SpoutLibrary即可,并且SpoutLibrary还对API进行了简单封装。
SPOUTSDK\SpoutLibrary也是带了VS的工程文件的,我们直接打开Spout2-2.007.010\SPOUTSDK\SpoutLibrary\VS2022\SpoutLibrary.sln这个项目,如果你不是VS2022也没有关系,切换一下版本就行,比如我的使用VS2019,那么只需要在项目属性-常规-平台工具集选择对应的工具集即可,如下图所示。
不过配置下来发现这个项目配置有点问题,为了方便之后使用,我们首先需要将所有配置-所有平台的目标文件名修改成一致的,我这里是使用的SpoutLibrary作为项目名称,如上图。
然后就按不同平台不同配置分别编译出Win32/x64的Debug/Release版本库就行了。编译完成之后,相应的dll保存在Spout2-2.007.010\SPOUTSDK\SpoutLibrary\VS2022的Win32/x64文件夹下。
2 在VS中配置Spout2开发环境
就像使用C++其他第三方库一样,我们将第1节中编译好的库按include、lib、bin目录分辨放好不同平台不同配置的库,然后在VS工程中配置路径即可,这个步骤比较简单就不再详细说明了。
3 Spout2简单的使用
在SPOUTSDK\SpoutLibrary\SpoutLibrary.pdf文件中简单介绍了如何使用SpoutLibrary这个库。
首先需要在项目中包含头文件
#include "SpoutLibrary.h"
然后创建一个库的实例
SPOUTLIBRARY* pSpout = GetSpout();
然后再使用这个实例创建sender或者receiver,这里以创建sender为例,
pSpout->CreateSender(senderName, g_Width, g_Height);
然后就可以使用创建的sender发送视频帧了,比如
pSpout->SendTexture(senderTexture, GL_TEXTURE_2D, g_Width, g_Height);
最后在程序退出之前释放指针
if(pSpout)
{
pSpout->ReleaseSender();
pSpout->Release();
}
更加详细的使用方法可参考官方文档:https://spoutlibrary-site.netlify.app/#File:SpoutLibrary.cpp
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Windows编译Spout2以及配置Spout2开发环境
原文链接:https://www.stubbornhuang.com/2662/
发布于:2023年06月20日 9:56:04
修改于:2023年06月20日 9:56:04
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
52