Exoplayer не может воспроизводить некоторые аудиопотоки
Я разработал несколько приложений для Android для прослушивания интернет-радиостанций.
Для аудиопотока я использовал библиотеку Vitamio. К сожалению, он больше не поддерживается и содержит проблемы совместимости с Android 7.
После долгих попыток я решил пойти в библиотеку ExoPlayer. Я был очень доволен простотой использования и постоянным обновлением. Кроме того, он уменьшил размер моего APK в три раза.
К сожалению, библиотека ExoPlayer не может воспроизводить некоторые аудиопотоки. Я пробовал отладку, изменение звонков на URL и многое другое. Неудачно.
Это примеры потоков, которые я не могу воспроизвести с помощью библиотеки ExoPlayer, но я могу воспроизвести с помощью Vitamio:
http://42747t.lp.azioncdn.net:1935/2747t/a/mp4:access_options/rtmp-live/atl_poa.sdp/playlist.m3u8 http://192747t.lp.azioncdn.net/2747t/a/mp4:access_options/rtmp-live/gau_centro.sdp/playlist.m3u8
Некоторые из этих потоков очень важны для успеха моего приложения.
У меня нет доступа к серверу.
Вот что говорит на logcat:
04-26 21: 09: 20.189 27953-27953 / com.eneasgesing.radios.rs E / EventLogger: playerFailed [987.08] com.google.android.exoplayer2.ExoPlaybackException на com.google.android.exoplayer2.ExoPlayerImplInternal.handleMesserI (ExoP.java:345) на android.os.Handler.dispatchMessage(Handler.java:98) на android.os.Looper.loop(Looper.java:154) на android.os.HandlerThread.run(HandlerThread.java:61) на com.google.android.exoplayer2.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40). Причина: com.google.android.exoplayer2.source.UnrecognizedInputFormatException: ни один из доступных экстракторов (MatroskaExtractor, FragmentedMp4E44 AdtsExtractor, Ac3Extractor, TsExtractor, FlvExtractor, OggExtractor, PsExtractor, WavExtractor) могут считывать поток. в com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractorHolder.selectExtractor(ExtractorMediaPeriod.java:713) в com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMava):.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:295) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) в java.util.concurrent.ThreadPoolExcecutor.java:607) на java.lang.Thread.run(Thread.java:761)
1 ответ
Это может помочь увидеть часть кода, который вы используете для запуска exoplayer
Я предполагаю, что вы используете стандарт ExtractorMediaSource
.m3u8
файлы на самом деле являются списками воспроизведения, текстовыми файлами, которые ссылаются на медиафайлы - обычно для прямых трансляций. Вам понадобится еще один MediaSource
, попробуйте HLS, или HlsMediaSource
вместо ExtractorMediaSource
HLS расшифровывается как HTTP Live Streaming.
Чтобы воспроизвести файл.m3u8, используйте приведенный ниже код при инициализации Exoplayer:
Handler mHandler = new Handler();
String userAgent = Util.getUserAgent(context, "Your Application Name");
DataSource.Factory dataSourceFactory = new DefaultHttpDataSourceFactory(
userAgent, null,
DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,
1800000,
true);
HlsMediaSource mediaSource = new HlsMediaSource(Uri.parse(mediaUrl),dataSourceFactory, 1800000,mHandler, null);
if (mediaUrl != null) {
videoPlayer.prepare(mediaSource);
videoPlayer.setPlayWhenReady(true);
}