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 ().
- Android VideoView inicia muchos videos secuencialmente
- No se pudo abrir el archivo en el lado del cliente, intentando el lado del servidor Error en Android
- Cambiar el tamaño de VideoView
- Reproducir vídeo en parte de la pantalla
- Cómo puedo reproducir video desde byte en android
- Cómo reproducir varios vídeos en diferentes vistas de vídeo en una actividad
- Reanudar la reproducción de VideoView desde onResume
- Cómo cerrar Landscape VideoView Activity correctamente?
- Cómo detectar si VideoView está reproduciendo video o Buffering?
- ¿Cómo ejecutar varios videos con diferentes VideoViews en una actividad en android 2.2?
- VideoView: Evitar el flash negro de pantalla completa
- Problema de parpadeo de VideoView
- La vista de video no reproduce el video de youtube
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.
- DrawBitmap con diferentes salidas de renderizado (Nexus 7 versus otros dispositivos)
- Sobreescribiendo el método onScroll del com.android.View en la codificación android?