Spout.NET is a C# .NET Core Implementation for Spout2, a video frame sharing system for Windows.
This is mostly generated by CPPSharp and appears to work just fine as is, but not everything has been tested.
It links the Spout.dll MD version.
Heavily inspired by https://github.com/Ruminoid/Spout.NET but dotnet core 8 compatible.
Feel free to contribute to fix any bugs if anything comes up.
Both the sender and receiver need to use the same gpu context, so if you are on a laptop and one uses the IGpu and one the dedicated one, the frame sending will fail, but the receiver will still detect the sender (this tends to happen if you use this to send to obs studio as it defaults to the dedicated GPU whereas your code may not)
Sample Code (same as .net framework variant):
using System;
using System.IO;
using System.Threading;
using Spout.Interop;
using Spout.NETCore;
namespace SpoutTest
{
class Program
{
static unsafe void Main(string[] args)
{
SpoutSender sender = new SpoutSender();
sender.CreateSender("CsSender", 640, 360, 0); // Create the sender
byte[] data = new byte[640 * 360 * 4];
int i = 0;
fixed (byte* pData = data) // Get the pointer of the byte array
while (true)
{
for (int j = 0; j < 640 * 360 * 4; j+=4)
{
data[j] = i == 0 ? byte.MaxValue : byte.MinValue;
data[j + 1] = i == 1 ? byte.MaxValue : byte.MinValue;
data[j + 2] = i == 2 ? byte.MaxValue : byte.MinValue;
data[j + 3] = byte.MaxValue;
}
Console.WriteLine($"Sending (i = {i})");
sender.SendImage(
pData, // Pixels
640, // Width
360, // Height
GLFormats.RGBA, // GL_RGBA
true, // B Invert
0 // Host FBO
);
Thread.Sleep(1000); // Delay
if (i < 2) i++;
else i = 0;
}
}
}
}MIT