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