2015-01-20 92 views
0

我有包含VideoView的一個實例,其MediaPlayer的參考一個簡單的活動。我的目標是使用MediaPlayer對象中的setNextMediaPlayer()API,以最小化2個視頻之間的切換時間。的Android setNextMediaPlayer()API是不是在玩下一個視頻

在下面的代碼中,1st視頻播放良好。當視頻完成後,視頻的音頻開始在後臺播放,但僅顯示視頻的最後一幀。

你知道問題出在哪裏嗎?爲什麼不是第二張視頻的視頻顯示?

private VideoView player1; 
private MediaPlayer mediaPlayer1; 

public static final String URL_1 = "https://example.com/video1.mp4"; 
public static final String URL_2 = "https://example.com/video2.mp4"; 

public static final String TAG = "PrebufferingActivity"; 

public boolean FIRST_TIME = true; 
public int count = 0; 

@SuppressLint("NewApi") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_prebuffering); 

    player1 = (VideoView) findViewById(R.id.videoPlayer1); 

    player1.setOnPreparedListener(new OnPreparedListener(){ 
     @Override 
     public void onPrepared(MediaPlayer mp)   { 
      mediaPlayer1 = mp; 

      if(FIRST_TIME == true) 
      { 
       mediaPlayer1.start(); 
       player1.requestFocus(); 
       FIRST_TIME = false; 
      } 
     } 
    }); 

    player1.setOnInfoListener(new OnInfoListener(){ 
     @Override 
     public boolean onInfo(MediaPlayer mp, int what, int extra)   
     { 
      if(what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) 
      { 
       count++; 
       if(count % 2 != 0) 
       { 
        Log.d(TAG, "Odd count (" + count + ") Prebuffering URL_2"); 
        MediaPlayer myMediaPlayer = MediaPlayer.create(PrebufferingActivity.this, Uri.parse(URL_2)); 
        mp.setNextMediaPlayer(myMediaPlayer); 
       } 
       else 
       { 
        Log.d(TAG, "Even count (" + count + ") Prebuffering URL_1"); 
        MediaPlayer myMediaPlayer = MediaPlayer.create(PrebufferingActivity.this, Uri.parse(URL_1)); 
        mp.setNextMediaPlayer(myMediaPlayer); 
       } 
      } 
      return false; 
     } 
    }); 

    player1.setOnCompletionListener(new OnCompletionListener(){ 
     @Override 
     public void onCompletion(MediaPlayer mp) { 

     } 
    }); 

    // Player 1 
    player1.setMediaController(new MediaController(this)); 
    player1.setVideoURI(Uri.parse(URL_1)); 
} 

回答

0

在您的例子,你創建新的MediaPlayer,但VideoView一無所知且無法控制它。它將無法正常工作。

如果您需要某些特定的功能,可能需要構建您的模擬VideoView,那將使用MediaPlayer

關於使用setNextMediaPlayer(),你可以在這裏找到一些提示播放視頻第二: https://stackoverflow.com/a/28465846/755313

+0

嗨demaksee,謝謝您的回答。我創建了一個新的MediaPlayer並將其設置爲此處的下一個媒體播放器:MediaPlayer myMediaPlayer = MediaPlayer.create(PrebufferingActivity.this,Uri.parse(URL_1)); mp.setNextMediaPlayer(myMediaPlayer);由於「mp」與VideoView相關聯,不應該這樣工作嗎? – codeshark 2015-02-11 22:47:42

+0

不應該。 VideoView只知道自己的MediaPlayer(在這種情況下是mp),在這種情況下方法setNextMediaPlayer不起作用。如果您需要自己的自定義視頻視圖,則應該編寫它: public class CustomVideoView extends View {0} {0} {0} MediaPlayer mp = new MediaPlayer(); ... } – demaksee 2015-02-12 23:05:25