Я использую Exoplayer 2.11. * Для создания приложения для потокового аудио на Android. Аудио размещается на удаленном сервере, а потоковая передача выполняется с помощью Icecast. Проблема в том, что сервер иногда не работает, и когда пользователь открывает приложение в этот раз, я хочу показать тост об этом. Сначала я делал это как:
final ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(
getContext(),
Util.getUserAgent(getContext(), "SUSTCast"),
defaultBandwidthMeter);
Mediasource mediaSource = new ExtractorMediaSource(
Uri.parse(iceURL),
dataSourceFactory,
extractorsFactory,
new Handler(), error -> {
//shows a toast here
}
);
, но в этом случае тост отображается 3-4 раза, так как я думаю, что exoplayer пытается перезагрузить URI. В качестве альтернативы я попытался решить эту проблему с помощью блока try / catch ... но это просто не смогло отловить ошибку. Может ли кто-нибудь сказать мне, что еще я мог бы попробовать или что я здесь делаю не так? Это трассировка стека исключения, созданного во время неработающего сервера:
ExoPlayerImplInternal: Source error.
com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: Response code: 404
at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:300)
at com.google.android.exoplayer2.upstream.DefaultDataSource.open(DefaultDataSource.java:177)
at com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:83)
at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:956)
at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:391)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)