Как уменьшить время буферизации потокового приложения?

Я создаю приложение для Android, которое должно транслировать онлайн-радиостанцию ​​с URL.

В настоящее время я работаю над демо-версией, и мне очень помогли онлайн-уроки, но у меня возникла проблема.

Когда я нажимаю кнопку "СЛЕДУЮЩАЯ", она должна получить звук с другого URL, что дает эффект смены станции, но это занимает слишком много времени и в большинстве случаев не работает.

Можно ли как-нибудь сократить время на 95%, потому что я хочу, чтобы оно началось почти сразу, после нажатия на кнопку "Далее".

КОД ДЛЯ СЛЕДУЮЩЕЙ КНОПКИ

b_next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               mediaPlayer.stop();
                mediaPlayer.reset();
                try {
                    mediaPlayer.setDataSource("http://stream.radioreklama.bg/veronika.opus");
                    mediaPlayer.prepare();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                mediaPlayer.start();
            }
        });

1 ответ

Возможно, проблема не в буферизации, например, на стороне сервера может быть некоторое время медленного запуска.

В любом случае, если вы хотите контролировать буферизацию, есть обратный вызов, предоставленный MediaPlayer, который сделает это - 'OnBufferingUpdateListener.onBufferingUpdate()'.

Из документации MediaPlayer ( https://developer.android.com/reference/android/media/MediaPlayer.html):

Находясь в состоянии "Запущено", внутренний движок проигрывателя вызывает пользователя, предоставленного методом обратного вызова OnBufferingUpdateListener.onBufferingUpdate (), если OnBufferingUpdateListener был предварительно зарегистрирован через setOnBufferingUpdateListener(OnBufferingUpdateListener). Этот обратный вызов позволяет приложениям отслеживать состояние буферизации при потоковой передаче аудио / видео.

Одним из распространенных методов ускорения переключения между потоками на разных платформах является предварительная подготовка следующего потока.

Для вашего случая вам понадобится второй медиаплеер, который вы инициализируете и перейдете в подготовленное состояние, и, возможно, даже добьетесь точки, а затем воспроизведите ее, как только остановите другой.

Для прямых трансляций это будет немного сложнее, поскольку вы не можете увидеть точку таким же образом. Вы можете поэкспериментировать с игрой второго игрока, но с пониженной громкостью, хотя это, очевидно, не очень эффективно, если у вас нет надежного способа предсказать, когда пользователь собирается переключиться.

Другие вопросы по тегам