2013-09-03 26 views
6

Videolardan oluşan bir oynatma listesi uygulamaya çalışıyorum; böylece bir videodan diğerine sorunsuz geçişleri. MediaPlayer nesnesinde, videoyu önceden oynatmaya hazır olacak bir readyeasync() yöntemi vardır, böylece oynatmaya hazırdır. VideoView nesnesinden readyeasync yöntemini nasıl çağırırım? MediaPlayer için bulduğum örnekler VideoView kullanmıyor ve yüzeyi sıfırdan oluşturuyor gibi görünüyor. Ya da örnekler, videoview.play() öğesinden sonra ortaya çıktığı görünen videoview olay listelerinde dönüş parametresi olarak mediaPlayer kullanır. Ben playeasemc() ve sonra daha sonra the play() çağırmak için bu yüzden playview çağırmadan önce videoview'ın mediaplayer erişmek istiyorum.MediaPlayer.PrepareAsync öğesini VideoView'dan çağırma

cevap

0

VideoView, MediaPlayer ve SurfaceView etrafında bir sarmalayıcıdır, böylece bunu kendiniz yapmanız gerekmez. SetVideoURI öğesini çağırdığınızda sarıcının hazırladığına inanıyorum. VideoPlayer'ın içinde bulunan üst düzey etkinlik yürütücüsü aracılığıyla VideoView içindeki mediaplayer'ı elde etmek mümkün ve bunu aldıktan sonra, kendinizi ilk kez aramaya hazırlayabilirsiniz diye düşünüyorum, ama içselleri bir araya getirmem ve bu yüzden iyi belgelenemiyorum. beklendiği gibi çalışmayabilir.

1

Belirtildiği gibi, user1023110 belirtildiği gibi, VideoView MediaPlayer'ın etrafındaki sarıcıdır. openVideo (docs kullanışlı hiç olmadığından) bunu içten kendi özel yönteminde prepareAsync() çağrıları doğruladı kaynak koduna Dalış():

private void openVideo() { 
    if (mUri == null || mSurfaceHolder == null) { 
     // not ready for playback just yet, will try again later 
     return; 
    } 
    // Tell the music playback service to pause 
    // TODO: these constants need to be published somewhere in the framework. 
    Intent i = new Intent("com.android.music.musicservicecommand"); 
    i.putExtra("command", "pause"); 
    mContext.sendBroadcast(i); 

    // we shouldn't clear the target state, because somebody might have 
    // called start() previously 
    release(false); 
    try { 
     mMediaPlayer = new MediaPlayer(); 
     if (mAudioSession != 0) { 
      mMediaPlayer.setAudioSessionId(mAudioSession); 
     } else { 
      mAudioSession = mMediaPlayer.getAudioSessionId(); 
     } 
     mMediaPlayer.setOnPreparedListener(mPreparedListener); 
     mMediaPlayer.setOnVideoSizeChangedListener(mSizeChangedListener); 
     mMediaPlayer.setOnCompletionListener(mCompletionListener); 
     mMediaPlayer.setOnErrorListener(mErrorListener); 
     mMediaPlayer.setOnInfoListener(mOnInfoListener); 
     mMediaPlayer.setOnBufferingUpdateListener(mBufferingUpdateListener); 
     mCurrentBufferPercentage = 0; 
     mMediaPlayer.setDataSource(mContext, mUri, mHeaders); 
     mMediaPlayer.setDisplay(mSurfaceHolder); 
     mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     mMediaPlayer.setScreenOnWhilePlaying(true); 
     mMediaPlayer.prepareAsync(); 
     // we don't set the target state here either, but preserve the 
     // target state that was there before. 
     mCurrentState = STATE_PREPARING; 
     attachMediaController(); 
    } catch (IOException ex) { 
     Log.w(TAG, "Unable to open content: " + mUri, ex); 
     mCurrentState = STATE_ERROR; 
     mTargetState = STATE_ERROR; 
     mErrorListener.onError(mMediaPlayer, MediaPlayer.MEDIA_ERROR_UNKNOWN, 0); 
     return; 
    } catch (IllegalArgumentException ex) { 
     Log.w(TAG, "Unable to open content: " + mUri, ex); 
     mCurrentState = STATE_ERROR; 
     mTargetState = STATE_ERROR; 
     mErrorListener.onError(mMediaPlayer, MediaPlayer.MEDIA_ERROR_UNKNOWN, 0); 
     return; 
    } 
}