Spout.NET is a C# .NET Implementation for Spout2, A video frame sharing system for Windows.
You can install Spout.NET from NuGet.
Install-Package Spout.NETPlease notice that Spout.NET requires NuGet 3.3 or higher (in other words, PackageReference). If your project uses packages.config, please migrate your packages to PackageReference.
The API of this mapping library is completely consistent with the Spout SDK, so you can refer to the Spout SDK Documentation for development. You can use Marshal Class to avoid unsafe code.
-
Create an .NET Framework Console project.
-
Re-target the build config to
x64. -
Add the following nuget packages.
Install-Package Spout.NET-
Turn on
Allow Unsafe Codein project config. -
Put the following code into
Program.cs.
using System; using System.IO; using System.Threading; using OpenGL; using Spout.Interop; namespace SpoutTest { class Program { static unsafe void Main(string[] args) { using (DeviceContext deviceContext = DeviceContext.Create()) // Create the DeviceContext { IntPtr glContext = IntPtr.Zero; glContext = deviceContext.CreateContext(IntPtr.Zero); deviceContext.MakeCurrent(glContext); // Make this become the primary context 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 Gl.RGBA, // GL_RGBA true, // B Invert 0 // Host FBO ); Thread.Sleep(1000); // Delay if (i < 2) i++; else i = 0; } } } } }
- Run this program and open the SpoutReceiver.exe. You can now see the 640x360 window changing red, blue, green color.
MIT