Envoyer le flux audio sur le protocole TCP, UnsupportedAudioFileException

J'ai réussi avec l'envoi et la lecture de texte et de données d'images sur les sockets TCP. Mais je ne suis pas en mesure d'envoyer et de lire des flux audio.

exemple de code sur le serveur:

public class ServerAudio {
    /**
     * @param args
     */
    public static void main(String[] args) {
        //TODO Auto-generated method stub

        try {
            ServerSocket serverSocker = new ServerSocket();
            Socket client = null;
            serverSocker.bind(new InetSocketAddress(6666));
            if (serverSocker.isBound()) {
                client = serverSocker.accept();
                OutputStream out = client.getOutputStream();
                while (true) {
                    AudioInputStream ain = testPlay("C:/Users/Public/Music/Sample Music/adios.wav");
                    if (ain != null) {
                        AudioSystem.write(ain, AudioFileFormat.Type.WAVE, out);
                    }
                }
            }
            serverSocker.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public static AudioInputStream testPlay(String filename) {
        AudioInputStream din = null;
        try {
            File file = new File(filename);
            AudioInputStream in = AudioSystem.getAudioInputStream(file);
            System.out.println("Before :: " + in.available());

            AudioFormat baseFormat = in.getFormat();
            AudioFormat decodedFormat =
                    new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED, baseFormat.getSampleRate(),
                            8, baseFormat.getChannels(), baseFormat.getChannels(),
                            baseFormat.getSampleRate(), false);
            din = AudioSystem.getAudioInputStream(decodedFormat, in);
            System.out.println("After :: " + din.available());
            return din;
        } catch (Exception e) {
            //Handle exception.
            e.printStackTrace();
        }
        return din;
    }
}

exemple de code au client:

public class RDPPlayAudioBytes {
    private static Socket socket;
    /**
     * @param args
     */
    public static void main(String[] args) {
        //TODO Auto-generated method stub
        //SocketAddress socketAddress = new InetSocketAddress("172.19.1.50", 4444);
        try {
            Socket socket = new Socket("172.19.0.109", 6666);
            //socket.connect(socketAddress, 10000);
            if (socket != null && socket.isConnected()) {
                InputStream inputStream = socket.getInputStream();
                //DataInputStream din=new DataInputStream(inputStream);
                while (inputStream != null) {
                    if (inputStream.available() > 0) {
                        System.out.println(inputStream.available());
                        InputStream bufferedIn = new BufferedInputStream(inputStream);
                        System.out.println("********** Buffred *********" + bufferedIn.available());
                        AudioInputStream ais = AudioSystem.getAudioInputStream(bufferedIn);
                    }
                }
            }


        } catch (IOException e) {
            //TODO Auto-generated catch block
            e.printStackTrace();
        } /*
           * catch (LineUnavailableException e) { //TODO Auto-generated catch block
           * e.printStackTrace(); }
           */catch (UnsupportedAudioFileException e) {
            //TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Où j'obtiens une Exception, comme le

javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input stream
    at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)

Où j'ai observé que le serveur envoie 35394bytes de données pour le client, Mais à côté client, nous recevons 8192 octets de données. Je suis incapable de comprendre pourquoi les octets sont manquants à côté client.

S'il vous plaît aider moi comment faire pour envoyer le flux audio sur les Sockets TCP.

Juste un conseil: ne pas utiliser available(). Dans la plupart des cas, il n'est pas ce que vous attendez.
essayez avec cette AudioInputStream ain = testPlay("C:\\Users\\Public\\Music\\Sample la Musique\\adios.wav");
regardez ce qu'une fois stackoverflow.com/questions/11174813/...
Couple de choses à vérifier. Dans testplay, après la création de file, d'imprimer les valeurs de file.exists(), file.canRead(), et file.getCanonicalPath(). Si tout semble bon, essayez d'imprimer la valeur de AudioSystem.getAudioFileFormat(file). Si cela échoue, prendre un bon coup d'oeil à votre fichier et assurez-vous qu'il est vraiment un fichier WAV.

OriginalL'auteur mini | 2013-06-11