簡體   English   中英

AsyncTask:在AudioTrack中實現executeOnExecutor()線程類

[英]AsyncTask: Implementing executeOnExecutor() thread class in AudioTrack

我在使用AsyncTask作為executeOnExecutor()進行並行執行時遇到問題,但是在發送和接收音頻時出現延遲(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 << ------

如果發起呼叫= 1,則在兩個用戶之間傳輸數據,即發送和接收語音數據。

------ >>發起呼叫= 1時,傳輸數據

發送和接收語音數據<< ------

播放音頻數據有什么問題?

播放音頻時語音出現延遲。 發送和接收響應之間的時間過長,大約為400毫秒至600毫秒。 我該怎么做才能解決這個問題? 如上面的代碼所示,第一次保存5個數據塊時,當它接收到5個音頻數據時,它們立即開始一個接一個地播放。

嘗試將5音頻數據減少到3? -並非總是最好的主意,但這可能會有所幫助。 帶寬如何,足以舒適地傳輸? 網絡延遲如何? 進行ping操作,如果有400毫秒,則比OFC不能做什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM