关于android:Exoplayer无法播放某些音频流

Exoplayer can't play some audio streams

我已经开发了一些Android应用程序来收听Internet广播电台。

对于音频流,我一直在使用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
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:345)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:154)
at android.os.HandlerThread.run(HandlerThread.java:61)
at com.google.android.exoplayer2.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
Caused by: com.google.android.exoplayer2.source.UnrecognizedInputFormatException: None of the available extractors (MatroskaExtractor, FragmentedMp4Extractor, Mp4Extractor, Mp3Extractor, AdtsExtractor, Ac3Extractor, TsExtractor, FlvExtractor, OggExtractor, PsExtractor, WavExtractor) could read the stream.
at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractorHolder.selectExtractor(ExtractorMediaPeriod.java:713)
at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:636)
at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:295)
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)


查看用于初始化exoplayer的某些代码可能会有所帮助,我假设您使用的是标准ExtractorMediaSource

.m3u8文件实际上是播放列表,文本文件,它们链接到媒体文件-通常用于直播。 您将需要另一个MediaSource,尝试HLS或HlsMediaSource而不是ExtractorMediaSource

HLS代表HTTP实时流。


要播放.m3u8文件,请在初始化Exoplayer时使用以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    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);
    }