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);
    }
Другие вопросы по тегам