如何提高java中实时音频流应用的音频质量

时间:2017-01-19 18:17:05

标签: java sockets audio

我正在为ad-hoc网络构建点对点直播音频流java应用程序。以下是基于UDP套接字的实时语音通信示例代码。

\ Sender

        byte tempBuffer[] = new byte[10000];        
        DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class, adFormat);
        targetDataLine = (TargetDataLine) AudioSystem.getLine(dataLineInfo);
        targetDataLine.open(adFormat);
        targetDataLine.start();
        byteOutputStream = new ByteArrayOutputStream();
        stopaudioCapture = false;
        DatagramSocket clientSocket = new DatagramSocket(9786);
        while (!stopaudioCapture) {
            int cnt = targetDataLine.read(tempBuffer, 0, tempBuffer.length);
            if (cnt > 0) {
                DatagramPacket sendPacket = new DatagramPacket(tempBuffer, tempBuffer.length,ip,port);
                clientSocket.send(sendPacket);
                byteOutputStream.write(tempBuffer, 0, cnt);
            }
        }
        byteOutputStream.close();
    } 

\接收机

        byte[] receiveData = new byte[10000];
           while (true) {
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
        serverSocket.receive(receivePacket);
        System.out.println("RECEIVED: " + receivePacket.getAddress().getHostAddress() + " " + receivePacket.getPort());

            byte audioData[] = receivePacket.getData();
            InputStream byteInputStream = new ByteArrayInputStream(audioData);
            InputStream = new AudioInputStream(byteInputStream, adFormat, audioData.length / adFormat.getFrameSize());
            DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, adFormat);
            sourceLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);
            sourceLine.open(adFormat);
            sourceLine.start();
            int cnt;
        while ((cnt = InputStream.read(tempBuffer, 0, tempBuffer.length)) != -1) {
            if (cnt > 0) {
                sourceLine.write(tempBuffer, 0, cnt);
            }

我使用UDP连接建立连接。应用程序工作正常,但是实时但语音质量不好。我必须提高语音质量。我想知道还有什么可以改善语音质量? 我不能使用TCP,因为我需要实时通信。我听说过RTP协议但我不知道如何实现它。在java中有没有API来实现RTP?

0 个答案:

没有答案