AsyncTask
으로 병렬 실행을위한 executeOnExecutor()
으로 문제가 있지만 오디오를 송수신 할 때 지연 (400ms ~ 600ms)이 발생합니다. 음성 통화를 기록AsyncTask : AudioTrack에서 executeOnExecutor() 스레드 클래스 구현
코드 :
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);
}
두 사용자 사이의 통화를, 먼저 그림과 같이 개최 호출 시작 여기 내 코드입니다. USER2가 호출을 수신하면 사용자 (2) 초기화 호출 사용자 (1)로부터 호출
------ >> = 0
= 1 < < ------
경우이 호를 개시 초기화 통화 = 1, 두 사용자간에 데이터 전송, 즉 음성 데이터 송수신.
------ >> 경우 음성 데이터 < < ------
오디오 데이터의 재생에 문제가 무엇인가를 송신 및 수신 통화 = 1, 데이터 전송
을 시작? 오디오를 재생하는 동안
목소리로 지연을 얻기. & 수신 응답을 전송하는 시간 사이에 너무 약 400 밀리 초 600 밀리 초이다. 이 문제를 해결하려면 무엇을해야합니까? 그 위의 코드에 도시 된 바와 같이 5 개의 오디오 데이터가, 다른 한 후 즉시 재생을 시작 받으면, 처음 5 개 데이터 청크를 들고.
감사 matheszabi, 당신은 좀 더 아이디어를 줄 수 있습니다, 내가 방법을 많이 시도하지만 잘 작동되지는 내가 사용하여 동적으로 할 때, 내 음성 데이터는, 그때 JSON 개체의 작업을 정적으로 CHK 매우 고르지 못함 음성 데이터가 매우 고르지 않게 전이중이되는 로컬 서버, 내게 도움이 되길 바랍니다. – Satyam
오디오 및 비디오 응용 프로그램에서 최상의 결과를 얻으려면 NDK가 필요하며 멀리 떨어져있는 플랫폼 개발이 필요합니다. 현재 인프라 스트럭처 미스 설정, 설정이 있습니다. –