MediaPlayer android 流广播没有立即启动或根本没有启动
MediaPlayer android stream radio starts not immediately or does not start at all
我使用这个代码:
mediaPlayer.setDataSource("http://some online radio");
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.prepareAsync();
和onPrepared
方法是:
if (mediaPlayer != null) {
mediaPlayer.start();
}
总的来说,问题是:然后我运行这段代码,播放没有马上开始,而是大约10秒后。 + 一些流根本不启动,在模拟器上它比在设备上运行得好一点,但仍然如此。这要看具体收音机了,有的比较好,有的很差。
我假设这件事正在准备和缓冲中。可以从这个流中创建一个 InputStream
并写入一些临时文件/缓冲区,并且 read/play 这个文件在 MediaPlayer
中,但是如何实现它还不清楚.. 请帮忙
如果你只做 mp.prepare
,然后 mp.start
- 结果是一样的
在 Chrome 的 PC 上,我尝试使用的所有广播流立即开始播放
对不起我的英语,谢谢。
似乎音频比特率可能是这里的关键:。似乎没有简单的方法来解决这个问题。
如果流式传输根本没有开始,可能是由于某些错误,您可以使用 MediaPlayer.setOnErrorListener().
捕捉到错误
如果有人出于同样的原因来到这里(以防万一),解决方案是 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
我使用这个代码:
mediaPlayer.setDataSource("http://some online radio");
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.prepareAsync();
和onPrepared
方法是:
if (mediaPlayer != null) {
mediaPlayer.start();
}
总的来说,问题是:然后我运行这段代码,播放没有马上开始,而是大约10秒后。 + 一些流根本不启动,在模拟器上它比在设备上运行得好一点,但仍然如此。这要看具体收音机了,有的比较好,有的很差。
我假设这件事正在准备和缓冲中。可以从这个流中创建一个 InputStream
并写入一些临时文件/缓冲区,并且 read/play 这个文件在 MediaPlayer
中,但是如何实现它还不清楚.. 请帮忙
如果你只做 mp.prepare
,然后 mp.start
- 结果是一样的
在 Chrome 的 PC 上,我尝试使用的所有广播流立即开始播放
对不起我的英语,谢谢。
似乎音频比特率可能是这里的关键:。似乎没有简单的方法来解决这个问题。
如果流式传输根本没有开始,可能是由于某些错误,您可以使用 MediaPlayer.setOnErrorListener().
捕捉到错误如果有人出于同样的原因来到这里(以防万一),解决方案是 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