Audio streamen bricht immer ab nach kurzer Zeit

Dann07

Aktives Mitglied
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:

Java:
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:

Java:
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

Aktives Mitglied
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

Top Contributor
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

Aktives Mitglied
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

Top Contributor
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

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

Ähnliche Java Themen

Neue Themen


Oben