2010-11-09 149 views
4

我使用Android的MediaPlayer类从一些偏移量开始播放歌曲。在代码中指定此偏移量后,我播放歌曲,期望从该偏移位置听到它,但我从头开始听到它播放。请注意以下代码:MediaPlayer seekTo不一致地播放歌曲

MediaPlayer mplayer = new MediaPlayer(); 
    mplayer.reset(); 
    try { 
     // For example's sake, specify some known song path 
     mplayer.setDataSource("//media/external/audio/media/1"); 
     // call blocking prepare() 
     mplayer.prepare(); 
    } catch (Exception e) { 
    // Keep try/catch simple for example's sake 
     e.printStackTrace(); 
     return; 
    } 

    // seekTo is an asynchronous operation. Set it's complete callback to play the song once seekTo has completed 
    mplayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() { 
     @Override 
     public void onSeekComplete(MediaPlayer mp) { 
      // Start the song 30 seconds in 
      mp.start(); 
     } 
    }); 
    // Seek to 30 seconds into the song 
    mplayer.seekTo(30000); 

此代码示例运行,而无需在模拟器中的错误(对机器人1.6,2.1测试,和2.2);然而,在某些手机上运行时,该歌曲将从一开始播放。我知道这确实发生在我的Droid Incredible(android 2.2)上。另外请注意,LogCat将始终有一些MediaPlayer类的输出,表明歌曲的位置确实已设置为某个偏移量。我已经调试了几个小时,并搜索论坛,仍然没有解决方案。请帮忙。

回答

1

如果您现在还没有找到它,那么这是一个缓冲问题(issue documented here)。寻求非缓冲位置会导致从头开始播放。建议的解决方案是found here(不是最优雅的,但是大概需要做的)。

+0

感谢您的输入。我不认为这些问题是相同的。您连接的错误涉及流媒体,并声称可以在2.2版本中进行补救。我所描述的错误似乎只影响HTC手机(据我所知)。 – jdgilday 2011-01-20 02:13:25

+0

他们声称已经在2.2中修复了,但如果你在评论中读到大多数人仍然有问题。我有一个难以置信的,仍然有这个问题。您是否在非HTC手机上进行过测试? – Cameron 2011-01-21 15:52:30

+0

在我的HTC Evo上,如果我寻求缓冲或无缓冲的位置,它会从头开始重新启动流,并在日志中看到StageFright错误。 – HenryAdamsJr 2011-01-28 21:27:48