# Audio Server selbst erstellen



## ZoXlike (24. Mai 2016)

Moin Leute, ich weiß nicht so wirklich wie ich die Überschrift hier sinnvoll wähle 

Es geht darum, ich habe in meiner Wohnung an einem PC meine komplett Anlage hängen, möchte aber gerne auch von meinen anderen Geräten (Laptop, Mac, Handys, Tablet, ...) Musik abspielen können ohne das Gerät immer extra an an die Anlage anzuschließen und für jeden Liederwechsel quer durch die Wohnung laufen.

Dann habe ich mir überlegt ob es nicht einfacher wäre sich einen Audio Server zu basteln der automatisch alles wiedergibt was ihm gesendet wird.

Heißt ich möchte auf dem PC (oder ggf. später mal ein PI) einen Server laufen lassen und jedes meiner Geräte kann diesem Server einfach seine komplette Audio rüber streamen ohne das ich noch irgendwas annehmen muss oder sonstigem.

Ich will im Grunde nurnoch das Programm auf meinem Laptop starten und dann läuft der gesamte Audio Ausgang auf den Server.


Ich kann mir gut vorstellen, dass es schon Programme für einen solchen Zweck gibt, aber ich möchte das gerne selbst verwirklichen. 

Wie kann ich das am besten umsetzen, bzw. wie fang ich das am besten an?
Hat jemand Erfahrungen mit Audio Streaming über Java?

- ZoXlike


----------



## dayaftereh (24. Mai 2016)

Audio wird meistens über UDP verschickt, da es dir egal ist falls mal ( 1 von 1e6) ein Paket verloren geht. Zudem ist der Overhead ziemlich klein. Ich würde ein Server bauen auf Basis der Netzwerk Bibliothek Netty. Für die Ausgabe der Audio bzw Sound würde ich auf die Java Sound API zurück greifen.

Ablauf:

Der Server wartet auf UDP Pakete, encodiert sie und schrieb sie weiter auf den Audio Output. Dazu benötigst du ein Client, der die Audio Daten liest, verpackt und dan an den Server schickt.


----------



## David Schwarzbeck (24. Mai 2016)

Also....
Du brauchst einen Server Soccet in deinem Progamm (in dem Fall auf deinem PC an dem alles hängt).
Dann braucht jedes deiner Geräte eine App/Programm, dass als Client fungiert.
Der Client muss sich dann über das lokale Netzwerk mit dem Soccet verbinden (siehe Server Programmierung Java, werd ich jetzt nicht alles hier vorprogrammieren).
Über eine Dateiauswahl (mit Swing relativ einfach zu verwirklichen) kann der Client nun die Datei an den Server Soccet senden und hier wirds dann knifflig. 
Ich hab schon oft versucht Audios mit Java zu öffnen: das Problem: Java unterstützt -  selbst mit Libarys - nur sehr wenige Audio Datei Formate. Also musst du alle gegebenenfalls in wav Dateien convertieren oder eine Libary für mp3 runterladen. Hast du das, kann der Server den empfangen Datenstrom, am besten lokal und vllt. temporär, speichern und direkt danach verwenden. Soweit die Theorie. Ist relativ umfangreich und - meiner Meinung nach -  schwer zu verwirklichen. Falls du Hilfe im Code brauchst kannst du gerne nachfragen.


----------



## David Schwarzbeck (24. Mai 2016)

dayaftereh hat gesagt.:


> Audio wird meistens über UDP verschickt, da es dir egal ist falls mal ( 1 von 1e6) ein Paket verloren geht. Zudem ist der Overhead ziemlich klein. Ich würde ein Server bauen auf Basis der Netzwerk Bibliothek Netty.


 Wieso nicht einfach die Standart Server Soccets von Java?


----------



## ZoXlike (24. Mai 2016)

Danke schonmal an euch zwei 

@David Ich möchte den kompletten Sound streamen, also im Grunde als ob ich mit einem Bluetooth Lautsprecher verbunden bin.


----------



## David Schwarzbeck (24. Mai 2016)

ZoXlike hat gesagt.:


> Danke schonmal an euch zwei
> 
> @David Ich möchte den kompletten Sound streamen, also im Grunde als ob ich mit einem Bluetooth Lautsprecher verbunden bin.


Wieso lädst du die Datei nicht enfach temporär auf deinen PC? Würde Verbindungsprobleme vorbeugen und bei Server Soccets im eigenen Netzwerk, sollte das nicht allzu lange dauern.


----------



## ZoXlike (24. Mai 2016)

David Schwarzbeck hat gesagt.:


> Wieso lädst du die Datei nicht enfach temporär auf deinen PC? Würde Verbindungsprobleme vorbeugen und bei Server Soccets im eigenen Netzwerk, sollte das nicht allzu lange dauern.



Inwiefern temporär auf meinen PC laden?


----------



## David Schwarzbeck (24. Mai 2016)

ZoXlike hat gesagt.:


> Inwiefern temporär auf meinen PC laden?


Der Client schickt die ganze Audio Datei an den Server. Dieser speichert sie in irgendeinen beliebigen Ordner und gibt sie direkt wieder. Über weitere Anweisungen des Clients kann die Datei vorgespult, zurückgespult und angehalten werden bzw. eine neue hochgeladen werden. Sollte die gleiche Datei später nochmals wiedergegeben werden sollen, hat sie der PC gleich. EVTL. kannst du nach der "Sitzung" also nach Beendigung der Verbindung die Dateien wieder vom Server löschen.


----------



## ZoXlike (24. Mai 2016)

Ich denke das du mich ein wenig missverstehst 
Ich möchte jeglichen sound den meine Geräte wiedergeben (z.B. Deezer, InGame sound, SystemAlerts, ...) wiedergeben lassen.

Heißt Java muss sich den kompletten AudioOutput von meinem Gerät (was auch ein Handy sein könnte) krallen und fröhlich an den Server senden, der das einfach nur abspielt. Es wird wohl später darauf hinaus laufen, dass es nur noch ein PI ist, der irgendwo in der nähe der Anlage hängt.


----------



## David Schwarzbeck (24. Mai 2016)

ACHSO... ja gut . Tschuldigung, hab gedacht nur Audio Dateien ;D


----------



## ZoXlike (24. Mai 2016)

Wenns nur Dateien wären, wär das nicht weiter Problematisch 
Es soll halt darauf hinauslaufen, dass ich jeden sound einfach (das installierte Programm /App vorausgesetzt) über meine Anlage abspielen lassen kann.


----------



## David Schwarzbeck (24. Mai 2016)

Ich hätts auch versucht mit UDP zu verschicken. Auf Android sollte das ganze kein Problem darstellen. Kenne mich mit System Audio von Windows etc. auch nicht so gut aus. Mit C++ oder C# sollte das auch etwas einfacherer sein, als mit Java..


----------

