갤럭시 탭 3의 Android 4.4에서 비디오 재생에 문제가 있습니다. 이전 Android 버전 4.2에서는 문제가 발생하지 않았습니다.Android 4.4에서 동영상 루핑 대신 MediaPlayer가 정지 함
문제
내가 루프에서 비디오를 재생하고 있습니다. 이것은 Tab 3이 Android 4.4로 업데이트 될 때까지 모든 사용자에게 매우 효과적이었습니다. 그 이후로 비디오는 첫 번째 루프 이후에 정지합니다 (정확한 비디오의 첫 번째 프레임에 붙어 있습니다).
내가 그 동작을 재현 할 수 있으며, 순간에 비디오 내 로그 캣은 다음과 같은 출력으로 전체 점점 시작 정지 :
16:25:25.239 14589-14601/my.app V/MediaPlayer? back from callback
16:25:25.499 14589-14686/my.app V/MediaPlayer? message received msg=7, ext1=0, ext2=0
16:25:25.499 14589-14686/my.app V/MediaPlayer? unrecognized message: (7, 0, 0)
16:25:25.499 14589-14686/my.app V/MediaPlayer? callback application
16:25:25.499 14589-14686/my.app V/MediaPlayer? back from callback
16:25:25.519 14589-14602/my.app V/MediaPlayer? message received msg=4, ext1=0, ext2=0
16:25:25.519 14589-14602/my.app V/MediaPlayer? Received seek complete
16:25:25.519 14589-14602/my.app V/MediaPlayer? All seeks complete - return to regularly scheduled program
16:25:25.519 14589-14602/my.app V/MediaPlayer? callback application
16:25:25.519 14589-14602/my.app V/MediaPlayer? back from callback
16:25:25.519 14589-14601/my.app V/MediaPlayer? message received msg=6, ext1=0, ext2=0
16:25:25.519 14589-14601/my.app V/MediaPlayer? Received MEDIA_STARTED
16:25:25.519 14589-14601/my.app V/MediaPlayer? callback application
16:25:25.519 14589-14601/my.app V/MediaPlayer? back from callback
16:25:25.789 14589-14686/my.app V/MediaPlayer? message received msg=7, ext1=0, ext2=0
16:25:25.789 14589-14686/my.app V/MediaPlayer? unrecognized message: (7, 0, 0)
16:25:25.789 14589-14686/my.app V/MediaPlayer? callback application
16:25:25.789 14589-14686/my.app V/MediaPlayer? back from callback
16:25:25.809 14589-14602/my.app V/MediaPlayer? message received msg=4, ext1=0, ext2=0
16:25:25.809 14589-14602/my.app V/MediaPlayer? Received seek complete
이 코드는
은 다음 (simplyfied) 활동은 가정된다 동영상을 재생할 수 있습니다. MediaPlayer.OnErrorListener() 및 MediaPlayer.OnInfoListener()는 호출되지 않습니다.
public class VideoActivity extends Activity {
private MediaPlayer mediaPlayer;
private String videoPath = "some path obtained from the system";
// [...]
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mediaPlayer = new MediaPlayer();
startMovie();
}
private void startMovie(){
mediaPlayer.stop();
mediaPlayer.reset();
mediaPlayer.setLooping(true);
mediaPlayer.setDataSource(videoPath);
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
mp.start();
mp.seekTo(0);
}
});
mediaPlayer.prepare();
}
}
비디오
내가 중지하고 영화를 시작하기 전에 플레이어를 재설정 이유입니다, 활동의 수명 기간 동안 다른 비디오 파일 경로에 여러 번 시작할 수 있습니다.지금까지 인터넷에서 발견 한 유일한 해결책은 MediaPlayer가 GC에 의해 수집되지 않았는지 확인하는 것이 었습니다. (이는 메소드 로컬 객체로 만들지 않음으로써) WakeLock을 구현합니다. 효과.
누구든지 나를 도울 수 있고 올바른 방향으로 나를 가리킬 수 있습니까? 고맙습니다! 솔루션보다 해결
더 좋은 해결책이 있습니까? 애니메이션 루프가 있는데 파일 경로를 다시로드하는 동안 반 초 동안 멈추지 않으려합니다. 감사합니다 – goodm
아니, 더 나은 해결책을 찾지 못했고 이것을 사용하여 끝났다. 제 경우에는 눈에 띄는 지연이 없었습니다 (그러나 비디오는 꽤 짧았습니다). –
이것에 대한 최신 정보? 이것은 또한 나를 위해 문제를 일으키는 것입니다 그리고 나는 S6를 사용하고 있습니다. – AndyRoid