Llamar a MediaPlayer.PrepareAsync de VideoView

Estoy tratando de implementar una lista de reproducción de videos para que tengan una transición suave de un video a otro. El objeto mediaPlayer tiene un método prepareasync () que parecería prebuffer el vídeo por lo que está listo para jugar. ¿Cómo invoco el método prepareasync del objeto VideoView? Los ejemplos que encontré para mediaPlayer no usan VideoView y parecen crear la superficie desde cero. O los ejemplos utilizan mediaPlayer como parámetro de retorno en videoview eventlisteners que parecen ocurrir sólo después de la videoview.play (). Me gustaría tener acceso al reproductor multimedia de videoview antes de invocar el método play para poder invocar el prepareasync () y luego el play ().

Tal como se ha mencionado en user1023110 , VideoView es un contenedor de MediaPlayer. El buceo en el código fuente (ya que los documentos no son útiles en absoluto) He confirmado que internamente llama a prepareAsync () en su método privado openVideo () :

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; } } 

VideoView es una envoltura alrededor de MediaPlayer y SurfaceView para que no tenga que hacerlo usted mismo. Creo que el envoltorio se prepara cuando se llama a setVideoURI. Es posible obtener el mediaplayer dentro de la VideoView a través de la onPrepared eventhandler, y una vez que lo tienes, supongo que puede llamar a prepararse después de la primera vez, pero me parece que los internos son difíciles y no bien documentado por lo que las cosas podrían No funciona como se esperaba.

  • Tamaño de la memoria intermedia de Android VideoView
  • Uso de VideoView para streaming o video de descarga progresiva
  • Android: VideoView dentro de Fragmento sólo reproduce audio, no muestra vídeo
  • Cómo modificar el ancho de videoview programatically
  • Ocultar el botón de pausa de reproducción del controlador de medios en android
  • VideoView flash negro antes y después de jugar
  • Problema con la vista de vídeo en android 4.0 y superior
  • Transmisión de video con videoview
  • Android 2.2 VideoView problema
  • ¿Por qué mi aplicación Android dice "No se puede reproducir el vídeo" después de la reproducción?
  • Android carga la animación antes de iniciar VideoView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.