Android: reproducción de video sin interrupciones o sin problemas MediaPlayer

Puedo reproducir los videos de forma consecutiva implementando elOnCompletionListener configurar la fuente de datos en un archivo diferente. No hay problemas allí. Yo lo llamoReiniciar() ypreparar() muy bien

Lo que no he podido descubrir es cómo deshacerse del parpadeo de la pantalla de intervalo de 1-2 segundos entre el cambio de fuente de datos y el inicio del nuevo video. El espacio muestra una pantalla en negro, y no he encontrado ninguna forma de evitarlo.

Intenté establecer el fondo de la vista principal en una imagen, pero se las arregla para evitarlo. Incluso si losSurfaceView es transparente (que es por defecto). También he intentado reproducir los múltiples archivos de video al mismo tiempo, y cambiar la pantalla del reproductor de medios cuando uno termina y se supone que el otro comienza.

Lo último que probé fue tener una segunda vista en segundo plano que muestro temporalmente mientras el video se está "preparando" y eliminándolo cuando el video está listo para comenzar. Eso tampoco fue muy sencillo.

¿Hay alguna manera de deshacerse de esa brecha? Ejecutar un video en un bucle funciona maravillosamente y hace exactamente lo que quiero, con la excepción de que está mirando el mismo video en lugar de reproducir uno diferente que elijo.

main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:background="@drawable/background"
    android:layout_height="fill_parent">
    <SurfaceView
        android:id="@+id/surface"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="center">
    </SurfaceView>
</FrameLayout>

Player.java

public class Player extends Activity implements
        OnCompletionListener, MediaPlayer.OnPreparedListener, SurfaceHolder.Callback {
        private MediaPlayer player;
    private SurfaceView surface;
    private SurfaceHolder holder;

    public void onCreate(Bundle b) {
        super.onCreate(b);
        setContentView(R.layout.main);
        surface = (SurfaceView)findViewById(R.id.surface);
        holder = surface.getHolder();
        holder.addCallback(this);
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);    
    }

    public void onCompletion(MediaPlayer arg0) {
        File clip = new File(Environment.getExternalStorageDirectory(),"file2.mp4");
        playVideo(clip.getAbsolutePath());
    }
    public void onPrepared(MediaPlayer mediaplayer) {
        holder.setFixedSize(player.getVideoWidth(), player.getVideoHeight());
        player.start();
    }

    private void playVideo(String url) {
        try {
            File clip = new File(Environment.getExternalStorageDirectory(),"file1.mp4");

            if (player == null) {
                player = new MediaPlayer();
                player.setScreenOnWhilePlaying(true);
            }
            else {
                player.stop();
                player.reset();
            }
            player.setDataSource(url);
            player.setDisplay(holder);
            player.setOnPreparedListener(this);
            player.prepare();
            player.setOnCompletionListener(this);
        }
        catch (Throwable t) {
            Log.e("ERROR", "Exception Error", t);
        }
    }