Spout.NET ist eine C# .NET-Implementierung für Spout2, ein Video-Frame-Sharing-System für Windows.
Sie können Spout.NET von NuGet installieren.
Install-Package Spout.NET
Bitte beachten Sie, dass Spout.NET
NuGet 3.3
oder höher erfordert (mit anderen Worten PackageReference
). Wenn Ihr Projekt packages.config
verwendet, migrieren Sie Ihre Pakete bitte nach PackageReference.
Die API dieser Zuordnungsbibliothek stimmt vollständig mit dem Spout SDK überein , sodass Sie für die Entwicklung auf die Spout SDK-Dokumentation zurückgreifen können. Sie können die Marshal-Klasse verwenden, um unsicheren Code zu vermeiden.
Erstellen Sie ein .NET Framework-Konsolenprojekt.
Richten Sie die Build-Konfiguration erneut auf x64
aus.
Fügen Sie die folgenden Nuget-Pakete hinzu.
Install-Package Spout.NET
Aktivieren Sie Allow Unsafe Code
in der Projektkonfiguration.
Fügen Sie den folgenden Code in Program.cs
ein.
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 ;
}
}
}
}
}
MIT