[英]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.