# Audio streamen bricht immer ab nach kurzer Zeit



## Dann07 (4. Apr 2020)

Guten Tag/Abend!
Ich hatte mal langeweile und hab versucht ein Programm zu machen worüber man Audio streamen kann.
Ansich klingt es nicht schwer. War es auch nicht aber irgendwie bricht der Client immer nach ein paar Sekunden die Übertragung ab.
Also am Server kommt nur ein bisschen was an. Man hört kurz was und dann nicht mehr.
Aber hier der Code vom Client:


```
public AudioClient() {
        try {
            int port = 50056;
            AudioInputStream audio = AudioSystem.getAudioInputStream(new File("audio.wav"));
            
            byte[] data = new byte[1024];
            int bytesRead = 0;
            InetAddress addr = InetAddress.getByName("127.0.0.1");
            DatagramSocket udpSocket = new DatagramSocket();
            int readed = 0;
            
            while((readed = audio.read(data, 0, data.length)) != -1) {
                DatagramPacket packet = new DatagramPacket(data, readed, addr, port);
                
                udpSocket.send(packet);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
```

Code vom Server:


```
public AudioServer() {
        try {
            int port = 50056;
            int samplerate = 44100;
            int channels = 2;
            boolean bigEndian = false;
           
            DatagramSocket udpSocket = new DatagramSocket(port);
            byte[] buf = new byte[1024];
            DatagramPacket receivePacket = new DatagramPacket(buf, buf.length);
            ByteArrayInputStream baiss = new ByteArrayInputStream(receivePacket.getData());
           
            AudioFormat format = new AudioFormat(samplerate, 16, channels, true, bigEndian);
           
            DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, format);
            SourceDataLine dataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);
           
            dataLine.open(format);
            dataLine.start();
           
            byte[] bytes;
           
            while((bytes = receivePacket.getData()) != null) {
                udpSocket.receive(receivePacket);
               
                dataLine.write(bytes, 0, bytes.length);
            }
           
            baiss.close();
            udpSocket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
```

Falls mir jemand helfen kann wäre es schon.


----------



## Dann07 (5. Apr 2020)

Update:
Nach einiger analyse glaube ich das er einige Stücke des Audios überspringt und dann auch nur einige Stücke sendet weshalb dann es so schnell zuende ist.
Hoffe so kann mir endlich jemand helfen mit der Info...


----------



## mihe7 (5. Apr 2020)

Naja, UDP ist eben kein verlässliches Protokoll. Vermutlich läuft folgendes ab: Du bombadierst den Server mit Paketen, der mit dem Abspielen nicht mehr hinterherkommt, daher gehen Pakete verloren.


----------



## Dann07 (5. Apr 2020)

mihe7 hat gesagt.:


> Naja, UDP ist eben kein verlässliches Protokoll. Vermutlich läuft folgendes ab: Du bombadierst den Server mit Paketen, der mit dem Abspielen nicht mehr hinterherkommt, daher gehen Pakete verloren.



Das funktioniert aber wenn ich es nicht mit einer Datei mache sondern mit dem Mikro.
Irgendwie komisch.


----------



## mihe7 (5. Apr 2020)

Das ist nicht komisch sondern stützt meine These: die Aufnahme bremst die Geschwindigkeit, mit der der Server mit Paketen bedient wird. Folglich hat der genügend Zeit zum Abspielen, ohne dass (massiv) Pakete verloren gehen. Liest Du dagegen einfach aus der Datei, kannst Du in wenigen Millisekunden mehrere Sekunden Audio übertragen.


----------



## Dann07 (5. Apr 2020)

Also sollte ich es lieber per TCP versuchen?


----------



## Dann07 (5. Apr 2020)

Hey, jetzt funktioniert es endlich. Ich hab es mit TCP versucht.
Danke für deine Hilfe und das du mir es erklärt hast.


----------

