简体   繁体   English

通过tcp流式传输语音

[英]Streaming voice over tcp

I've coded an app that streams audio over TCP from client to server but it does not work, ie no audible output. 我编写了一个应用程序,通过TCP从客户端到服务器传输音频,但它不起作用,即没有声音输出。 Could you check my code tell me whats wrong with it? 你能检查我的代码告诉我它有什么问题吗?

Client: 客户:

public void startStreaming() {


   Thread streamThread = new Thread(new Runnable() {

       @Override
       public void run() {
            try {

                int minBufSize =AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);

                Log.d("VD ", "Bufer intioalised "+minBufSize);

                short[] buffer=new short[minBufSize];


                Log.d("VS","Buffer created of size .c" + minBufSize);
              //  DatagramPacket packet;

                final InetAddress destination = InetAddress.getByName(target.getText().toString());
                port=Integer.parseInt(target_port.getText().toString());

                Socket socket=new Socket(destination,port);

                DataOutputStream dos=new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
                Log.d("VS", "Address retrieved.c");


                if (minBufSize != AudioRecord.ERROR_BAD_VALUE) {
                    recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,sampleRate,channelConfig,audioFormat,minBufSize);
                Log.d("VS", "Recorder initialized.c");}


                if (recorder.getState() == AudioRecord.STATE_INITIALIZED){
                    Log.d("VS", "Recorder working....c");
                    recorder.startRecording();}

                BufferedWriter input;
                while(status == true) {


                    //reading data from MIC into buffer
                  int  bufferReadResult = recorder.read(buffer, 0, buffer.length);


                      dos.write(buffer,0,bufferReadResult);

                  dos.flush();



                }

            } catch(UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                Log.e("IOException message:",e.getMessage().toString());


            }



        }

Server: 服务器:

public void startStreaming() { Thread streamThread = new Thread(new Runnable() { public void startStreaming(){Thread streamThread = new Thread(new Runnable(){

    @Override
    public void run() {



        try {

            int  minBufSize =1024;//recorder.getMinBufferSize(sampleRate,channelConfig,audioFormat);


            ServerSocket serversocket = new ServerSocket(50005);



             // DatagramSocket socket = new DatagramSocket(50005);


              byte[] buffer = new byte[1024];


                  if (minBufSize != AudioRecord.ERROR_BAD_VALUE) {



                      speaker = new AudioTrack(AudioManager.STREAM_MUSIC,sampleRate,channelConfig,audioFormat,minBufSize,AudioTrack.MODE_STREAM);


                      speaker.play();
                      Log.d("VR", "spekaer playing...");
                  }
            //  }




                  Log.d("VR", ""+status);
                  BufferedReader input;
                  InputStream is;
                  ObjectInputStream ois;
                  ByteArrayInputStream baiss;
                  socket = serversocket.accept();
                    DataInputStream dis=new DataInputStream(new BufferedInputStream(socket.getInputStream()));


                        while(status == true) {

                              //DatagramPacket packet = new DatagramPacket(buffer,buffer.length);

                            InputStream in = socket.getInputStream();

                            Log.d("content :", socket.getOutputStream().toString());


                            int i=0;
                            while (dis.available() > 0 && i < buffer.length) {
                                buffer[i]=(byte) dis.readShort();
                              i++;
                            }

       speaker.write(buffer,0,buffer.length);

Please give me your best help. 请给我你最好的帮助。

The answers are in the comments. 答案在评论中。 Both for server and client read()/write() had to be implemented better. 服务器和客户端read()/ write()都必须更好地实现。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM