2

对于并行执行,我遇到了问题AsyncTaskexecuteOnExecutor()但是在发送和接收音频时,我得到的声音有延迟(400 毫秒到 600 毫秒)。这是我的代码:

录音通话代码:

private void startRecording() { 
    recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
    RECORDER_SAMPLERATE, RECORDER_CHANNELS,
    RECORDER_AUDIO_ENCODING, BufferElements * BytesPerElement); 
    recorder.startRecording();
    isRecording = true;
    /*
     * Schedule a task for repeated fixed-rate execution after a specific
     * delay has passed.
     */
    timer.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {
                bData = new short[BufferElements];

                while (isRecording) {
                // gets the voice output from microphone to byte format
                /*
                 * Reads audio data from the audio hardware for recording
                 * into a buffer.
                 */
                recorder.read(bData, 0, BufferElements);
                if (AudioRecord.ERROR_INVALID_OPERATION != 0) {
                    /* Send the audio voice data to server */
                    SendAudio();
                }
            }}, 0, 1);
}

两个用户之间通话时,首先发起通话,如图所示。

------>> 从用户 1 呼叫用户 2 发起呼叫 = 0

如果 user2 接到呼叫,则发起呼叫 = 1 <<------

如果initial call = 1,则在两个用户之间传输数据,即发送和接收语音数据。

------>> 当Initiate call = 1时,传输数据

发送和接收语音数据<<------

播放音频数据有什么问题?

播放音频时出现语音延迟。发送和接收响应之间的时间太长,大约 400 毫秒到 600 毫秒。我需要做什么来解决这个问题?第一次持有 5 个数据块,当它收到 5 个音频数据时立即开始一个接一个地播放,如上面的代码所示。

4

1 回答 1

1

尝试将 5 个音频数据减少到 3 个?- 并不总是最好的主意,但它可能会有所帮助。带宽如何,是否足以舒适地传输?网络延迟如何?做一个 ping ,如果有 400 毫秒,那么你不能做太多事情。

于 2012-11-07T16:01:37.377 回答