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)
查看用于初始化
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); } |