2012-11-03 3 views
2

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 개 데이터 청크를 들고.

답변

1

은 3 5 오디오 데이터를 줄이기 위해 시도? 항상 최선의 아이디어는 아니지만 도움이 될 수 있습니다. 대역폭 얼마나 편안하게 전송을위한 충분하다? 네트워크 대기 시간은 어떻게됩니까? ping을하십시오, 400ms가 있다면 ofc보다 많이 할 수 없습니다.

+0

감사 matheszabi, 당신은 좀 더 아이디어를 줄 수 있습니다, 내가 방법을 많이 시도하지만 잘 작동되지는 내가 사용하여 동적으로 할 때, 내 음성 데이터는, 그때 JSON 개체의 작업을 정적으로 CHK 매우 고르지 못함 음성 데이터가 매우 고르지 않게 전이중이되는 로컬 서버, 내게 도움이 되길 바랍니다. – Satyam

+1

오디오 및 비디오 응용 프로그램에서 최상의 결과를 얻으려면 NDK가 필요하며 멀리 떨어져있는 플랫폼 개발이 필요합니다. 현재 인프라 스트럭처 미스 설정, 설정이 있습니다. –