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
当前分类随机文章推荐
- C++ - 拷贝构造函数与拷贝构造函数调用时机 阅读563次,点赞0次
- C++ - 我的代码风格/代码规范备忘 阅读1093次,点赞0次
- C++ – 字节数组byte[]或者unsigned char[]与short的相互转换 阅读1706次,点赞0次
- C++ - 函数返回多个返回值的方法总结 阅读2616次,点赞0次
- C++ - 将std::vector中的数值拷贝到数组中 阅读3608次,点赞1次
- C++ - 想用C++写服务器?C/C++ web服务第三方库、框架整理 阅读592次,点赞0次
- C++ - GBK编码下的全角字符转半角字符 阅读2073次,点赞0次
- C++ - RAII机制 阅读1007次,点赞0次
- Windows - 使用类的成员函数作为Win32窗口消息回调处理函数WindowProc 阅读1385次,点赞0次
- C++ - 判断本机文件是否存在的方式总结 阅读6178次,点赞0次
全站随机文章推荐
- 深度学习 - Transformer详细注释 阅读706次,点赞0次
- 一文带你从欧拉角的角度搞懂左手坐标系到右手坐标系的转换 阅读17112次,点赞20次
- C++ - 想用C++写服务器?C/C++ web服务第三方库、框架整理 阅读592次,点赞0次
- Windows - GDI/GDI+区别、用法总结 阅读455次,点赞0次
- Python3爬虫 - 下载反盗链图片的方式 阅读3055次,点赞1次
- OpenCV | C++ - 为原始图片添加透明通道,并将图片中的红色区域置为透明并保存 阅读529次,点赞0次
- FFmpeg - 录制HLS直播流为mp4文件 阅读2593次,点赞0次
- 资源分享 - Real-Time Volume Graphics 英文高清PDF下载 阅读2296次,点赞0次
- C++ - 使用std::chrono获取当前秒级/毫秒级/微秒级/纳秒级时间戳 阅读5079次,点赞0次
- WordPress - 非管理员登录后台直接重定向到指定页面 阅读1138次,点赞0次
评论
169