0
나는 비디오를 재생하기 위해 표면 뷰를 사용하고 있습니다. 사운드 및 비디오도 미디어 플레이어 seekto가 업데이트합니다. 하지만 롤리팝을 사용하면 검색 기능을 사용하려고 할 때 오디오 만 변경되지만 비디오는 동일한 위치에 있습니다. Lollipop이이 문제를 일으키는 이유는 누구나 도와 줄 수 있습니까?Mediaplayer Android Lollipop API 레벨 21에 대한 Seekbar가 업데이트되지 않습니다.
P. 롤리팝 이전 버전에서는 동일한 코드가 완벽하게 작동합니다. . 편집 : 동영상을 검색하는 동안 Facebook에서와 MX 플레이어에서도 동일한 동작을 관찰했습니다. 하지만 MX 플레이어에서 HW에서 SW 인코더로 바뀌면 잘 작동합니다. 내 코드에서이를 고치는 방법?
@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();
}
}
http://stackoverflow.com/questions/27122394/android-mediaextractor-mediacodec-seek는 비슷하게 들리지만 저수준 API를 사용하고있었습니다. – fadden
도움이되지 못했습니다. ( – RisingUp
누군가가 해결책을 제안 할 수 있다면 – RisingUp