Java 尝试通过tcp将歌曲流式传输到android时产生噪音

Java 尝试通过tcp将歌曲流式传输到android时产生噪音,java,android,tcp,stream,noise,Java,Android,Tcp,Stream,Noise,我制作了一些java代码,可以通过局域网将数据连接并发送到我的android设备,在接收器端,应用程序使用AudioTrack播放音频 它似乎在播放音频,但接收器只播放噪音 这是我的发件人代码: MainActivity具有以下功能- public void startStream() { //initiate the audioTrack and play it, then start listening try { int minBufferSize = A

我制作了一些java代码,可以通过局域网将数据连接并发送到我的android设备,在接收器端,应用程序使用AudioTrack播放音频

它似乎在播放音频,但接收器只播放噪音

这是我的发件人代码:

MainActivity具有以下功能-

public void startStream() {

    //initiate the audioTrack and play it, then start listening
    try {
        int minBufferSize = AudioTrack.getMinBufferSize(44100,AudioFormat.CHANNEL_OUT_STEREO,AudioFormat.ENCODING_PCM_16BIT);


        audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,44100, AudioFormat.CHANNEL_OUT_MONO,
                AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM);

        audioTrack.play();


        Streamer streamer = new Streamer(MainActivity.this);
        streamer.execute();

    }catch(Exception e) {
        say("mainSuperException");
    }
}
这是拖缆类别:

public class Streamer extends AsyncTask<Void, Void, Void> {

MainActivity mainActivity = null;
int i = 0;
Streamer(MainActivity m)
{
    mainActivity = m;
}

protected Void doInBackground(Void... p) {
    try {

        byte[] buffer = new byte[1024];
        ServerSocket serverSocket = new ServerSocket(3210);
        Socket socket = serverSocket.accept();
        DataInputStream input = new DataInputStream(socket.getInputStream());
        i = 0;
        byte[] size = new byte[4];
        input.read(size,0,4);
        int s = ByteBuffer.wrap(size).getInt();
        //Start streaming the file
        while (i<s) {

            try {
                input.read(buffer,0,1024);
                ++i;
                mainActivity.audioTrack.write(buffer, 0, buffer.length);

                Log.d("packetTag", "got "+i);
            } catch (IOException e) {
                e.printStackTrace();
                mainActivity.say("InnerioException");
            } catch (IllegalStateException e) {
                Log.e("packetTag", e.toString());
                mainActivity.say("InnerIllegalStateException");
            } catch (Exception e) {
                Log.e("InnerSuperException", e.toString());
                e.printStackTrace();
                mainActivity.say("InnerSuperException");
            }
        }
    } catch (IOException io) {
        Log.e("ioexception", io.toString());
        mainActivity.say("OuterioException");
    } catch (Exception e) {
        Log.e("SuperException", e.toString());
        e.printStackTrace();
        mainActivity.say("OuterSuperException");
    }
    return null;
}

}
}

现在我只是拼命地想让它工作,所以我明确地填写了所有的值,甚至计算出它发送的确切帧数,并将其作为大小发送

它正确地接收大小,并保持循环直到该值,但我听到的都是静态的

我查看了stackOverflow的所有内容,并尝试查看了大量java类文档,但似乎无法找出这里的错误

public class mainClassSend {

public static void main(String[] s)
{
    try {
        InputStream songInputStream = new FileInputStream("D:\\song.mp3");
        byte[] buffer = new byte[1024];
        InetAddress group = InetAddress.getByName("192.168.2.8");
        Socket socket = new Socket(group,3210);
        int i=0;

        byte[] size = ByteBuffer.allocate(4).putInt(3359).array();
        socket.getOutputStream().write(size);


        //Start streaming the file
        while ((songInputStream.read(buffer, 0, buffer.length)) > -1) {

            try {
                socket.getOutputStream().write(buffer, 0, buffer.length);
                ++i;
                System.out.println(i);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        songInputStream.close();
        socket.close();
        System.out.println(i);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }

}