【问题标题】:Reload data source in android media player在 android 媒体播放器中重新加载数据源
【发布时间】:2012-11-09 13:09:47
【问题描述】:

我在 android 中使用媒体播放器时遇到了困难。基本上,我尝试从正在下载的 SD 卡中播放一首歌曲(某种流媒体)。因此,在下载歌曲(20%)后,歌曲开始播放,如果我这样离开它,它可以正常工作直到结束。但是,如果我尝试在最后(超过 20%)进行搜索,显然它不会起作用,因为我的搜索位置在 EOF 文件上方,所以我在方法中制作了这段代码

        MediaPlayer mp = new MediaPlayer();
        mp.setDataSource(sFilePath);
        mp.prepare();
        int offset = (progress * mp.getDuration()) / 100;
        if (sCompleted) return;
        sLastSeek = offset;

        if (offset > sMediaPlayer.getDuration()) {
            sMediaPlayer.reset();
            sMediaPlayer.setDataSource(sFilePath);
            sMediaPlayer.prepare();
       } else {
           sMediaPlayer.seekTo(offset);
       }

sMediaPlayer 是我的媒体播放器,sFilePath 是文件路径。理论上应该涵盖我提出的案例,但是当我搜索文件长度时,播放器被重置(如代码所示)但没有播放,这非常尴尬并且超出了我的能力。

【问题讨论】:

  • 您是否尝试在 seekTo() 之前调用 start,如果您不调用 start() ,播放将不会自动恢复。此外,您应该使用异步方法为流式应用程序准备称为“prepareAsync”。
  • 是的,播放器已经启动,并且已经尝试使用 prepareAsync() 但结果是一样的。
  • 一个小补充,我为 android 4.0 创建了这个应用程序,因为我在 google 论坛上看到在 android 2.1 上存在 seekTo() 方法的问题,所以这里不再是这种情况了

标签: android android-mediaplayer seek


【解决方案1】:

也许 mediaPlayer 停止是因为它到达了歌曲的结尾。重新启动它,以稳定的时间间隔(比如每 5 秒)刷新文件,或者只使用 onCompletionListener。在最后一种情况下,当文件结束时,您可以重新加载文件并继续播放... mp.getCurrentPosition() 以获取它停止播放的位置。

我还注意到您指的是 sMediaPlayer,但您的 MediaPlayer 被定义为 mp。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多