Entwickler-Ecke

Internet / Netzwerk - Bilder streamen über Netzwerk


Aya - Sa 20.04.13 22:40
Titel: Bilder streamen über Netzwerk
Hi,

ich habe Netzwerk Technisch leider noch nicht sooo viel Erfahrung, deswegen hoffe ich mir kann hier jemand einen Tipp geben für mein Problem.

Ich habe auf Rechner A eine Camera hängen von der ich lauter JPEG Bilder bekomme, ca. 30 pro Sekunde. Die möchte ich gern via Netzwerk an ein Programm auf Rechner B streamen.

Im moment löse ich das ganze so, das ich auf Rechner B immer ein Bild von Rechner A requeste via TCP, und dieser dann daraufhin das aktuellste via TCP zurückschickt.

Das klappt soweit ganz gut, allerdings ist das gefühlt nicht die Idealste Lösung... eine Alternative die mir einfällt wäre, das Rechner A die Daten ständig via UDP schickt, und Rechner B eben nur dann etwas annimmt, wenn er grad Zeit dafür hat. Aber, nachdem bei UDP ja die Daten zerstückelt werden und auch gern mal verloren gehen weiß ich nicht wie ich das umsetzen sollte das ich immer komplette JPEG Bilder bekomme.

Im moment schickt Rechner A immer zuerst 4 Byte mit der Größe der Daten und dann die Daten selbst, Rechner B liest dann wie viele Bytes das JPEG haben wird und liest dann dementsprechend viele Bytes ein.

Wenn ich das mit UDP mache kann es ja sein das mitten im JPEG aufeinmal Daten verloren gehen etc..

Wie macht man sowas am geschicktesten?

Danke,
Aya


bummi - So 21.04.13 00:07

Die verlorenen Pakete sind nicht das einzige Problem.
Du müsstet Dich auch um die Sortierung der Pakete kümmern.
UDP ist IMHO nur geeignet um eine Nachricht über vorhandene neue Daten zu schicken.
Den Abruf der Bilder per TCP könntest Du einen Thread erledigen lassen.


jaenicke - So 21.04.13 18:04

UDP ist für den Zweck ideal, allerdings solltest du dafür eine streamfähige Komprimierung benutzen. JPEG-Bilder sind dafür nicht geeignet.

Einem Videostream ist es egal, wenn mal ein Paket verloren geht, da gibt es dann einen kleinen Bildfehler, aber das Video kommt gut rüber. Wenn man bei jedem Paketfehler dieses erst korrigiert, ist das für einen Livestream schlecht, weil es ggf. ruckelt.