有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java MediaPlayer 安卓 stream radio不会立即启动或根本不会启动

我使用以下代码:

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) 个答案

  1. # 2 楼答案

    如果有人出于同样的原因(以防万一)来到这里,解决方案就是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