【问题标题】:using buffering in Android MediaPlayer for playing mp3在 Android MediaPlayer 中使用缓冲来播放 mp3
【发布时间】:2018-02-08 17:47:32
【问题描述】:

我在互联网上有一个 mp3 文件的 url,想在我的应用程序中播放它。现在我这样做如下:

private void processPlayRequest(String url) {
    if (mPlayer != null) {
        mPlayer.stop();
        mPlayer.reset();
        mPlayer.release();
    }

    tryToGetAudioFocus();
    if (mAudioFocus == AudioFocus.Focused) {
        mPlayer = MediaPlayer.create(this, Uri.parse(url));
        mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

        mPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);

        mPlayer.setOnPreparedListener(this);
        mPlayer.setOnCompletionListener(this);
        mPlayer.setOnErrorListener(this);
    }
}

它可以工作,但似乎没有缓冲,即只有在下载整个 mp3 文件后才开始播放。我想在有可能获得更快的性能时开始播放。所以我需要使用缓冲。有没有可能实现?

【问题讨论】:

  • 默认播放文件的一部分,不需要添加任何内容
  • 但事实并非如此。我尝试将 OnBufferingUpdateListener 添加到我的播放器,但它仅在 100% 时触发一次

标签: android stream buffering


【解决方案1】:

您需要添加一个MediaPlayer.OnPreparedListener,并调用MediaPlayer.prepareAsync(),然后从onPrepared() 回调中调用start()。

您以不正确的方式调用 start、reset 和 release。如果您要立即重置并释放,为什么还要开始?

在开发人员docs 中有一些关于如何使用该类的相当不错的文档。

【讨论】:

  • 这不是重点。当然这是一个错字,我在释放播放器之前调用了 mPlayer.stop() 而不是 mPlayer.start()。
  • 顺便说一句,使用 MediaPlayer.create() 时不需要调用 prepare() 或 prepareAsync(),它在 create() 方法中调用
猜你喜欢
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
  • 2013-03-24
相关资源
最近更新 更多