AsyncTask:在AudioTrack中实现executeOnExecutor()线程类

时间:2012-11-03 09:26:15

标签: java android android-asynctask http-post audiotrack

我遇到AsyncTask作为executeOnExecutor()进行并行执行的问题,但是在发送和接收音频时,我的语音有延迟(400 ms到600 ms)。这是我的代码:

录制音频通话的代码:

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<< ------

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

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

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

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

播放音频时语音延迟。发送时间和时间接收响应太多,大约400毫秒到600毫秒。我该怎么做才能解决这个问题?第一次拿着5个数据块,当它收到5个音频数据时,就会一个接一个地开始播放,如上面的代码所示。

1 个答案:

答案 0 :(得分:1)

尝试将5个音频数据减少到3个? - 并不总是最好的主意,但它可能有所帮助。 带宽如何足以轻松传输? 网络延迟如何?做一个ping,如果有400ms,那么你做不了多少。