在之前的博文中介绍了如何配置Spout2的开发环境,在本文中我将简单介绍一下如何使用Spout2发送视频流到OBS中进行推流。
1 使用Spout2 SDK将视频流发送到OBS
其实Spout2已经将API封装的非常简单易用了,通过参考官方的示例,我自己写了以下的代码将视频流推流到本机OBS中,示例代码如下
#include <iostream>
#include "SpoutLibrary.h"
#include "opencv2/opencv.hpp"
int main()
{
std::string image_path = "../../resource/final.png";
cv::Mat image = cv::imread(image_path, CV_8UC4);
cv::Mat image_copy;
cv::cvtColor(image, image_copy, cv::COLOR_BGRA2RGBA);
int image_height = image.rows;
int image_width = image.cols;
SPOUTLIBRARY* ptr_spout = GetSpout();
ptr_spout->EnableSpoutLog();
ptr_spout->SetSpoutLogLevel(SpoutLibLogLevel::SPOUT_LOG_VERBOSE);
ptr_spout->SpoutLog("Spout version : %s", ptr_spout->GetSDKversion().c_str());
//sender->SetSenderName("spout_test");
bool res = ptr_spout->CreateSender("spout_test", image_width, image_height);
for(int i = 0; i < 100000; ++i)
{
ptr_spout->SendImage(image_copy.data, image_width, image_height, GL_RGBA);
ptr_spout->HoldFps(30);
}
if (ptr_spout != nullptr)
{
ptr_spout->ReleaseSender();
ptr_spout->Release();
}
return 0;
}
上述代码依赖OpenCV和Spout2。
首先通过OpenCV读取一张带有透明通道的图片,然后获取图片的宽高信息。之后创建一个Spout Sender对象,通过SendImage
发送图片到本机OBS,循环发送100000遍模拟视频流,最后释放内存。当然你也可以使用OpenCV读取一个视频,将每一帧视频帧发送到OBS中。
下图是没有使用Spout2推流到OBS的画面
下图是使用Spout2发送透明图片到OBS的画面
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++ – 使用Spout2将视频流发送到OBS
原文链接:https://www.stubbornhuang.com/2682/
发布于:2023年06月25日 13:56:27
修改于:2023年06月25日 13:56:27
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
50