我遇到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个音频数据时,就会一个接一个地开始播放,如上面的代码所示。
答案 0 :(得分:1)
尝试将5个音频数据减少到3个? - 并不总是最好的主意,但它可能有所帮助。 带宽如何足以轻松传输? 网络延迟如何?做一个ping,如果有400ms,那么你做不了多少。