MediaPlayer android流媒体广播不立即启动或根本不启动

时间:2017-03-15 15:25:03

标签: java android media-player android-mediaplayer audio-streaming

我使用此代码:

mediaPlayer.setDataSource("http://some online radio");
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mediaPlayer.setOnPreparedListener(this);
            mediaPlayer.prepareAsync();

onPrepared方法是:

if (mediaPlayer != null) {
        mediaPlayer.start();
    }

一般来说,问题是:然后我运行此代码,播放不会立即开始,但大约10秒后。 +某些流根本没有启动,在模拟器上它比在设备上运行得好一些,但仍然如此。这取决于具体的收音机,有些更好,其他非常糟糕。

我认为问题在于准备和缓冲。可以从此流中生成InputStream并写入一些临时文件/缓冲区,并在MediaPlayer中读取/播放此文件,但如何实现它尚不清楚..请帮忙

如果您只是mp.prepare,然后mp.start - 结果是相同的

在Chrome中的PC上,我尝试使用的所有无线电流都会立即开始播放

对不起我的英文,谢谢。

2 个答案:

答案 0 :(得分:1)

如果有人出于同样的原因来到这里(以防万一),解决方案是ExoPlayer

类似这样的东西:

 LoadControl loadControl = new DefaultLoadControl();


        bandwidthMeter = new DefaultBandwidthMeter();
        extractorsFactory = new DefaultExtractorsFactory();

        trackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);

        trackSelector = new DefaultTrackSelector(trackSelectionFactory);
        defaultBandwidthMeter = new DefaultBandwidthMeter();
        dataSourceFactory = new DefaultDataSourceFactory(this,
                Util.getUserAgent(this, "mediaPlayerSample"), defaultBandwidthMeter);


        mediaSource = new ExtractorMediaSource(Uri.parse(radioURL), dataSourceFactory, extractorsFactory, null, null);

        player = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);
        player.prepare(mediaSource);
        player.setPlayWhenReady(true);

但是您最好在此处检查示例的实际版本:https://github.com/google/ExoPlayer

答案 1 :(得分:0)

似乎音频比特率可能是关键:https://stackoverflow.com/a/12850965/3454741。似乎没有简单的方法来解决这个问题。

如果流式传输根本没有启动,可能是由于某些错误造成的,您可以使用MediaPlayer.setOnErrorListener()来捕获。