Spout.NET
1.0.0
Spout.NET은 Windows용 비디오 프레임 공유 시스템인 Spout2를 위한 C# .NET 구현입니다.
NuGet에서 Spout.NET을 설치할 수 있습니다.
Install-Package Spout.NET
Spout.NET
에는 NuGet 3.3
이상(즉, PackageReference
)이 필요합니다. 프로젝트에서 packages.config
사용하는 경우 패키지를 PackageReference로 마이그레이션하세요.
이 매핑 라이브러리의 API는 Spout SDK와 완전히 일치 하므로 개발 시 Spout SDK 설명서를 참조할 수 있습니다. Marshal Class를 사용하면 안전하지 않은 코드를 피할 수 있습니다.
.NET Framework 콘솔 프로젝트를 만듭니다.
빌드 구성을 x64
로 다시 타겟팅합니다.
다음 너겟 패키지를 추가하십시오.
Install-Package Spout.NET
프로젝트 구성에서 Allow Unsafe Code
켭니다.
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 ;
}
}
}
}
}
MIT