2

並列実行で問題が発生AsyncTaskexecuteOnExecutor()ましたが、音声の送受信に遅延(400ms〜600ms)の音声が出ます。これが私のコードです:

音声通話を録音するためのコード:

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);
}

2人のユーザー間で電話をかける場合は、最初に図に示すように電話をかけます。

------>>ユーザー1からユーザー2への通話通話の開始=0

user2が呼び出しを受信した場合、呼び出しを開始= 1 << ------

通話開始=1の場合、2人のユーザー間でデータを転送します。つまり、音声データを送受信します。

------>>通話開始=1の場合、データを転送します

音声データの送受信<<------

オーディオデータの再生の問題は何ですか?

オーディオの再生中に音声が遅れる。応答の送信と受信の間の時間が長すぎて、約400ミリ秒から600ミリ秒です。この問題を解決するには何をする必要がありますか?上記のコードに示すように、5つのチャンクのデータを初めて保持すると、5つのオーディオデータが次々と再生を開始します。

4

1 に答える 1

1

5 つの音声データを 3 つに減らしてみませんか? -常に最良のアイデアとは限りませんが、役立つ可能性があります。帯域幅はどうですか、快適に転送するには十分ですか?ネットワーク遅延はどうですか?ping を実行します。400ms の場合、ofc よりも多くのことはできません。

于 2012-11-07T16:01:37.377 に答える