# Voicechat via UDP



## RawBit (23. Apr 2019)

Hallo liebe Gemeinde,

ich schreibe gerade spaßeshalber an einem kleinen Audio Chat (im Stil von Skype). Für Audio Eingang und Ausgang hab ich bereits alles, mein einziges Problem ist noch die Übertragung... für die brauche ich wohl UDP, das böte sich mit den Byte Arrays ja auch an.

Einziges Problem ist, dass ich UDP bisher konsequent vermieden habe und ich daher (weil ich zu sehr im Socket und ServerSocket Paradigma drin bin) absolut keine Vorstellung hab, wie das ganze abläuft. So wie ich das aus ein paar Tuts herausgelesen hab ist die Verbindung nicht wie bei TCP mit einem zentralen Server sondern per Peer2Peer. Aber wie sieht das in der Praxis aus? Hat da jeder Client einen DatagramSocket geöffnet, der sowohl sendet als auch empfängt? Wie tauschen die einzelnen Clients ihre IP Adressen aus, um zu kommunizieren? Braucht es dafür einen Handshake Server? Wie würde ich das machen, wenn ich dann mit mehreren Clients kommuniziere? Schickt dann ein Client über den Socket mehrere DatagramPackets an mehrere IP Adressen gleichzeitig oder geht das über einen zentralen Server, der die Packets dann broadcastet? Und gibt es eine Möglichkeit den Inhalt der DatagramPackets auseinanderzukennen? So im Sinne von: Dieses Packet beinhaltet Audiodaten, das andere einen String?

Ihr seht ich bin, was UDP angeht, noch komplett am Anfang also so eine kleine Hilfe um das Konzept der Kommunikation zu verstehen wäre sehr hilfreich.

Danke!


----------



## kneitzel (23. Apr 2019)

Also Du sprichst da ein sehr komplexes Thema an.

Braucht man udp für so eine Sache? Nicht zwingend, das geht auch alles per tcp. Da hat man etwas mehr overhead, aber man weiss, dass die Daten so ankommen, wie man diese abgeschickt hat. Das was tcp macht, muss man dann mehr oder weniger auch bei udp selbst implementieren, so man dies möchte.

Zentraler Server? Nein, braucht man nicht zwingend. Aber wenn Du einen Sprachchat aufbauen willst, dann wird das Sinn machen:
a) Die Clients sollen sich finden können. (Eingabe von IP Adressen mit Port nummer ist nicht unbedingt Anwenderfreundlich)
b) Was ist mit Systemen hinter einem NAT Device? Es gibt zwar Protokolle, die Ports automatisch freischalten können (So dies konfiguriert ist auf dem Router), aber die Gefahr ist sehr hoch, dass man einen Client eben nicht direkt erreichen kann. Da kann ein zentraler Server Sinn machen, zu dem die Clients eine Verbindung aufbauen. Und wenn keine direkte Kommunikation möglich ist, dann läuft die Kommunikation evtl. über den Server...

Das Konzept müsste also etwas konkretisiert werden. Ein Voicechat zwischen zwei Systemen in einem Netz kann aber durchaus interessant sein als ein Anfang. Um z.B. udp zu testen. Man kann da auch mit Broadcasts spielen, d.h. Clients senden jede Minute oder so einen Broadcast, mit denen sie sich im Netz melden und sie hören auch auf solche Broadcasts. Wäre aber mehr Spielerei als wirkliche Voice Applikation....


----------



## RawBit (23. Apr 2019)

Userbility ist nicht das Hauptaugenmerk, also ich mach das für mich und ein paar Leute, die schon mit Adressen und Ports umgehen können, nur ums dazu zu sagen, falls sich jetzt jemand ein falsches Bild wegen dem Skype-vergleich gemacht hat ^^


----------

