2010-06-16 85 views
5

我正在實現自定義視頻播放器,因爲我需要自定義視頻控件。我有一個應用程序只有一個活動,在啓動時,應立即開始播放視頻。現在與mediaplayer和seek的奇怪行爲

,我的問題是:

我不希望視頻從頭開始,而是從後面的位置。所以我做了一個尋求(16867)。由於seekTo是異步的,我將mediaplayer(player.start())的開始調用放在onSeekCompleteListener的onSeekComplete中。

我所經歷的奇怪行爲是,我可以在從實際播放/跳到我所尋找的位置之前,看到/聽到從幾毫秒開始播放的視頻。 但是 - 另一方面 - 我在player.start返回正確位置16867之前調用的日誌輸出。

下面是相關的代碼部分,完整的類是在http://pastebin.com/jqAAFsuX

(我在Nexus One/2.2怯場)

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時,我的體驗相同,而不是我自己的媒體播放器+表面實現。我也想知道爲什麼VideoView不提供setOnSeekCompletionListener,儘管它提供了seekTo。是不是seekTo異步? – 2010-06-17 01:35:32

+0

在http://code.google.com/p/android/issues/detail?id=9135 – 2010-06-17 03:51:10

+0

提交了一份錯誤報告到目前爲止,還有什麼好的解決方法?我知道2年了,但現在在我的應用中困擾着我 – Slartibartfast 2012-10-25 07:09:23

回答