Как уменьшить время буферизации потокового приложения?
Я создаю приложение для 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). Этот обратный вызов позволяет приложениям отслеживать состояние буферизации при потоковой передаче аудио / видео.
Одним из распространенных методов ускорения переключения между потоками на разных платформах является предварительная подготовка следующего потока.
Для вашего случая вам понадобится второй медиаплеер, который вы инициализируете и перейдете в подготовленное состояние, и, возможно, даже добьетесь точки, а затем воспроизведите ее, как только остановите другой.
Для прямых трансляций это будет немного сложнее, поскольку вы не можете увидеть точку таким же образом. Вы можете поэкспериментировать с игрой второго игрока, но с пониженной громкостью, хотя это, очевидно, не очень эффективно, если у вас нет надежного способа предсказать, когда пользователь собирается переключиться.