Seekbar未更新Mediaplayer Android棒棒糖API级别21
我使用surfaceview播放视频,mediaplayer seekto也会更新声音和视频。但在棒棒糖中,当我尝试使用seekto时,只有音频发生变化,但视频保持在相同的位置。有人能解释为什么棒棒糖会引起这个问题吗 另外,在棒棒糖之前的版本中,同样的代码可以完美地工作。 . 编辑:在Facebook上搜索视频和MX播放器时观察到了同样的行为。但在MX播放器中,从硬件到软件编码器的转换效果很好。如何在我的代码中修复它Seekbar未更新Mediaplayer Android棒棒糖API级别21,android,android-mediaplayer,surfaceview,android-5.0-lollipop,Android,Android Mediaplayer,Surfaceview,Android 5.0 Lollipop,我使用surfaceview播放视频,mediaplayer seekto也会更新声音和视频。但在棒棒糖中,当我尝试使用seekto时,只有音频发生变化,但视频保持在相同的位置。有人能解释为什么棒棒糖会引起这个问题吗 另外,在棒棒糖之前的版本中,同样的代码可以完美地工作。 . 编辑:在Facebook上搜索视频和MX播放器时观察到了同样的行为。但在MX播放器中,从硬件到软件编码器的转换效果很好。如何在我的代码中修复它 @Override public void onProgressChanged
@Override
public void onProgressChanged(SeekBar bar, int progress, boolean fromuser) {
long duration = mPlayer.getDuration();
long newposition = (duration * progress) / 1000L;
mPlayer.seekTo((int) newposition);
Log.d(TAG, "progress changed");
// mPlayer.setDisplay();
// mPlayer.start();
}
片段:
vidSurface = (SurfaceView) getActivity().findViewById(R.id.surfView);
frame = (FrameLayout) getActivity().findViewById(
R.id.videoSurfaceContainer);
vidHolder = vidSurface.getHolder();
vidHolder.addCallback(this);
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnErrorListener(this);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (mediaPlayer == null)
mediaPlayer = new MediaPlayer();
playVideo();
}
public void playVideo() {
mediaPlayer.reset();
mediaPlayer.setDisplay(vidHolder);
VideosModel model = null;
model = videosList.get(videoPosition);
videoTitle = model.getVideoTitle();
tvTitle.setText(videoTitle);
try {
// mediaPlayer.setDisplay(vidHolder);
mediaPlayer
.setDataSource(getActivity(), Uri.parse(model.getPath()));
tryToGetAudioFocus();
mediaPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
通过禁用开发者选项中的Nu player解决了这个问题。现在一切都很好。听起来很相似,不过使用的是较低级别的API。如果有人能提出一些解决方案吗?