2010-06-16 2 views
5

사용자 지정 비디오 컨트롤이 필요하기 때문에 사용자 지정 비디오 플레이어를 구현하고 있습니다. 시작시 동영상을 바로 재생하기 시작하는 하나의 액티비티가있는 앱이 있습니다. 나는 비디오가 처음부터 시작하지 않으mediaplayer 및 seekTo의 이상한 동작

하지만 나중에 위치에서 :

지금 내가 가지고있는 문제입니다. 그러므로 나는 seekTo (16867)를한다. seekTo는 비동기식이므로 onSeekCompleteListener의 onSeekComplete에 mediaplayer (player.start())의 시작 호출을 배치합니다.

내가 경험 한 이상한 행동은 내가 실제로 찾은 위치로 /에서 점프하기 전에 몇 밀리 초 동안 처음부터 재생되는 비디오를 보거나들을 수 있다는 것입니다. 그러나 - 반면에 - player.start가 내가 찾은 올바른 위치 16867을 반환하기 전에 호출하는 로그 출력. 다음은

는 관련 코드 섹션, 전체 클래스는 http://pastebin.com/jqAAFsuX

나는 또한 어떠한 회신을 받았다하지 않았으므로

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

btw : 내 자신의 미디어 플레이어 + 서페이스 구현 대신 SDK의 VideoView를 사용할 때도 동일한 경험을합니다. 또한 seekTo를 제공하더라도 왜 VideoView가 setOnSeekCompletionListener를 제공하지 않는지 궁금합니다. seekTo async도 아닌가? –

+0

http://code.google.com/p/android/issues/detail?id=9135 –

+0

에서 버그 신고 접수 지금까지 해결 방법이 있습니까? 나는 2 년을 알고 있지만, 이제는 내 응용 프로그램에서 나를 귀찮게하고있다. – Slartibartfast

답변

4

(내가 넥서스 원/2.2 스테이지 프라이트에있어)에있다 안드로이드 개발자 목록 및 웹에서 비슷한 문제를 발견, 나는 그것이 버그라고 결론 지었다. http://code.google.com/p/android/issues/detail?id=9135

+1

2 년 동안 나는 여전히이 문제를 안고있다. – Slartibartfast

+3

@Slartibartfast Android 프로그래밍에 오신 것을 환영합니다. 구글은 단순히 개발자를 신경 쓰지 않는다. – StackOverflowed