Ich erfasst Video-Stream mit Kinect-Gerät. Ich muss diese Streams über das Netzwerk senden. Zu diesem Zweck habe ich Steckdosen verwendet. Sie ist Stück Code in Server und Client:Video-Frame über Socket senden
private System.Drawing.Bitmap _CurrentBitmap;
public ManWindow()
{
InitializeComponent();
this.Loaded += delegate
{
BackgroundWorker bw1 = new BackgroundWorker();
bw1.RunWorkerCompleted += (a, b) => bw1.RunWorkerAsync();
bw1.DoWork += delegate { SendImage(); };
bw1.RunWorkerAsync();
};
}
public void SendImage()
{
Socket sListen = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
IPAddress IP = IPAddress.Parse("127.0.0.1");
IPEndPoint IPE = new IPEndPoint(IP, 4321);
sListen.Bind(IPE);
sListen.Listen(2);
while (true)
{
Socket clientSocket;
clientSocket = sListen.Accept();
var converter = new System.Drawing.ImageConverter();
byte[] buffer = (byte[])converter.ConvertTo(_CurrentBitmap, typeof(byte[]));
clientSocket.Send(buffer, buffer.Length, SocketFlags.None);
}
}
Auftraggeber:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
BackgroundWorker bw11111 = new BackgroundWorker();
bw11111.RunWorkerCompleted += (a, b) => bw11111.RunWorkerAsync();
bw11111.DoWork += delegate { Recive(); };
bw11111.RunWorkerAsync();
Recive();
}
public void Recive()
{
Socket s = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
IPAddress IP = IPAddress.Parse("127.0.0.1");
IPEndPoint IPE = new IPEndPoint(IP, 4321);
s.Connect(IPE);
while (true)
{
byte[] buffer = new byte[1000000];
s.Receive(buffer, buffer.Length, SocketFlags.None);
MemoryStream ms = new MemoryStream(buffer);
ms.Write(buffer, 0, buffer.Length);
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(ms);
Dispatcher.BeginInvoke(new Action(() =>
{
rgbImage11.Source = bitmap.ToBitmapSource();
}));
}
}
_CurrentBitmap ist Rahmen, der von Kinect und jede 1 Sekunde aktualisiert readed. Wenn der Client gestartet wird, rufen Sie die Socket Receive-Methode auf, er empfängt den Frame, und nach der Konvertierung in Bitmap wird er dem Image-WPF-Steuerelement zugewiesen. Mein Problem ist, dass diese Aktion eintritt und Schleife im Client nicht wiederholt wird.
Nur eine Vermutung, aber sobald Sie das Bild auf dem Server senden, fällt Ihre Socket außerhalb des Geltungsbereichs, so stelle ich mir vor, der Client verliert die Verbindung und stirbt. – Chris
Kein Fehler auftritt, warum Methode einmal aufgerufen? Gibt es eine andere Möglichkeit, ein Video zu senden? –