我正在实施自定义视频播放器,因为我需要自定义视频控件。我有一个只有一个活动的应用程序,在启动时应立即开始播放视频。
现在,我遇到的问题是:
我不希望视频从头开始,而是从稍后的位置开始。所以我做了一个寻求(16867)。由于seekTo是异步的,我将mediaplayer的开始调用(player.start())放在onSeekCompleteListener的onSeekComplete中。
我经历的一个奇怪的行为是,我可以看到/听到视频从一开始播放几毫秒才实际播放/跳到我寻找的位置。 但是 - 另一方面 - 我在player.start之前调用的Log输出返回正确的位置16867,我寻求的位置。
以下是相关的代码部分,完整的课程位于http://pastebin.com/jqAAFsuX
(我在Nexus One / 2.2 StageFright上)
private void playVideo(String url) {
try {
btnVideoPause.setEnabled(false);
if (player==null) {
player=new MediaPlayer();
player.setScreenOnWhilePlaying(true);
}
else {
player.stop();
player.reset();
}
url = "/sdcard/myapp/main/videos/main.mp4"; // <--- just for test purposes hardcoded here now
player.setDataSource(url);
player.setDisplay(holder);
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setOnCompletionListener(this);
player.setOnPreparedListener(this);
player.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
public void onSeekComplete(MediaPlayer mediaPlayer) {
Log.d("APP", "current pos... "+ player.getCurrentPosition() );
player.start(); // <------------------ start video on seek completed
player.setOnSeekCompleteListener(null);
}
});
player.prepareAsync();
}
catch (Throwable t) {
Log.e(TAG, "Exception in btnVideoPause prep", t);
}
}
public void onPrepared(MediaPlayer mediaplayer) {
width=player.getVideoWidth();
height=player.getVideoHeight();
if (width!=0 && height!=0) {
holder.setFixedSize(width, height);
progressBar.setProgress(0);
progressBar.setMax(player.getDuration());
player.seekTo(16867); // <------------------ seeking to position
}
btnVideoPause.setEnabled(true);
}
答案 0 :(得分:4)
由于我还没有收到Android开发者列表的任何回复,并在网上发现了类似的问题,我得出结论,这是一个错误。我在http://code.google.com/p/android/issues/detail?id=9135
提交了错误报告