Android Play PCM байтовый массив из конвертированных из Base64 String Slow Sounds

Как видно из очень длинного заголовка, у меня возникают проблемы при воспроизведении аудио из аудио, которое я посылаю по сети черезPubNunb, Что я делаю, я посылаю аудио во время записи из AudioRecord, используя этот код:

 AudioConfig audioConfig = getValidSampleRates(AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
    buffer = new byte[audioConfig.getBufferSize()];

    recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, audioConfig.getSampleSize(), AudioFormat.CHANNEL_IN_MONO, AUDIO_FORMAT, audioConfig.getBufferSize());

Записанные данные отправляются, когда пользователь удерживает кнопку нажатой:

   private class RecorderRunnable implements Runnable {
    @Override
    public void run() {
        while(mRecording) {
            Log.d("RECORDER_STATE", "Recording LOOP");
            recorder.read(buffer, 0, buffer.length);

            String base64EncodedBuffer = Base64.encodeToString(buffer, Base64.NO_WRAP);

            pubnub.publish(MainActivity.CHANNEL_ID, base64EncodedBuffer, new Callback() {
                @Override
                public void successCallback(String channel, Object message) {
                    super.successCallback(channel, message);
                }
            });
        }
    }
}

Получить код:

       @Override
                    public void successCallback(String channel, final Object message) {


                        byte[] decodedBase64 = Base64.decode(message.toString(), Base64.NO_WRAP);

                        speaker.write(decodedBase64, 0, decodedBase64.length);
                    }

Выпуск: Я получаю звук, но получаю очень медленные звуки. «Привет» будет звучать так: «Хи- * статический * -ll- * статический * -оо»

Чтобы исключить возможные причины, я попытался немедленно воспроизвести звук (без сети):

 while(mRecording) {
            Log.d("RECORDER_STATE", "Recording LOOP");
            recorder.read(buffer, 0, buffer.length);

            String base64EncodedBuffer = Base64.encodeToString(buffer, Base64.NO_WRAP);

            byte[] decodedBase64 = Base64.decode(base64EncodedBuffer, Base64.NO_WRAP);

            speaker.write(decodedBase64, 0, decodedBase64.length);
        }

(Примечание: я специально сделал конвертацию в base64 и обратно в байтовый массив.)

Результат для кода выше (непосредственно проигрывается после записи) довольно хорош. Так что мне интересно, что я делаю неправильно, обрабатывая его по сети.

Любое предложение приветствуется. Спасибо.

Изменить: 28.08.2015 Нашел хорошее объяснение этомуВот, Но теперь вопрос в том, каков наилучший способ обработки дрожания / буферизации сети и потери пакетов с использованием моей текущей реализации.

Ответы на вопрос(1)

Ваш ответ на вопрос