【问题标题】:Exoplayer can't play some audio streamsExoplayer 无法播放某些音频流
【发布时间】:2017-04-26 21:21:33
【问题描述】:

我开发了一些 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.handleMessage(ExoPlayerImplInternal.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、FragmentedMp4Extractor、Mp4Extractor、Mp3Extractor、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(ExtractorMediaPeriod.java:636) 在 com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:295) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 在 java.lang.Thread.run(Thread.java:761)

【问题讨论】:

    标签: android audio exoplayer m3u8 vitamio


    【解决方案1】:

    查看您用于启动exoplayer 的一些代码可能会有所帮助,我假设您使用的是标准ExtractorMediaSource

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

    HLS 代表 HTTP Live Streaming。

    【讨论】:

    • 使用HlsMediaSource 处理.m3u 文件解决了这个问题。谢谢+1
    【解决方案2】:

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

        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);
        }
    

    【讨论】:

      猜你喜欢
      • 2019-05-15
      • 2020-02-29
      • 2018-11-20
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 2012-04-01
      • 2012-09-26
      • 1970-01-01
      相关资源
      最近更新 更多