VideoView no se inicia cuando está invisible
Tengo un AsyncTask, donde ocultar una vista de vídeo, iniciar la reproducción de vídeo y mostrar la vista de vídeo cuando el video se reproduce.
Pero el video no se iniciará cuando la vista de vídeo se establece en invisible, la tarea asíncrona se mantiene colgando en onBackground. Si comento esta línea, el video comienza a reproducirse. ¿Por qué la vista de vídeo requiere una superficie visible ?
- Android :: VideoView dentro de un ScrollView
- Cómo hacer que una videoview NO se inicie automáticamente después de preparado
- VideoView y Progressive descargar
- Visibilidad del botón en VideoView después de usar videoView.setZOrderOnTop (true); Androide
- ¿Hay una manera de hacer una barra de progreso de VideoView personalizada sin la construcción de un MediaPlayer desde cero?
public void walk(final View v) { new AsyncTask() { @Override protected void onPreExecute() { super.onPreExecute(); mVideoView.setVisibility(View.INVISIBLE); // this line causes video not to start mVideoView.start(); } @Override protected Object doInBackground(Object... objects) { while (!mVideoView.isPlaying()) {} return null; } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); mVideoView.setVisibility(View.VISIBLE); } }.execute();
Un poco de fondo por qué estoy haciendo esto: Trato de evitar el conocido problema del flash negro que suele tener al iniciar un video:
Https://stackoverflow.com/search?q=%5Bandroid%5D+videoview+black
Https://stackoverflow.com/search?q=%5Bandroid%5D+video+%5Bmediaplayer%5D+black
- Android WebView transparente en la parte superior de VideoView
- Android 4.1 - RTSP con VideoView y MediaController
- Cómo jugar rtsp live stream desde android? (Rtsp: // someserver: port / live / 001204A006F5.stream)
- El video no se muestra en VideoView, pero puedo escuchar su sonido
- Android VideoView error (1,16) y muestra la pantalla en negro
- Reproducción de vídeo desde el servidor http en android
- Android VideoView Detección de ancho de banda
- VideoView en Viewpager, detener el vídeo al cambiar de página
El VideoView
es realmente un SurfaceView especializado. Un SurfaceView funciona creando otra ventana detrás de la ventana normal (que contiene todas las vistas), y luego tener un área de transparencia para que la nueva ventana (con su propia superficie de dibujo) se pueda ver detrás de ella.
Si un SurfaceView ya no es visible, su superficie será destruida, es decir, SurfaceHolder.Callback.surfaceDestroyed
se llama. El VideoView
no intentará reproducir su vídeo si no hay una superficie válida, por lo tanto su AsyncTask
podrá nunca dejar doInBackground
.
La superficie se creará para usted mientras que la ventana de SurfaceView es visible; Debe implementar surfaceCreated (SurfaceHolder) y surfaceDestroyed (SurfaceHolder) para descubrir cuándo se crea y destruye la superficie mientras se muestra y se oculta la ventana.
- Envío de datos del servicio a la actividad
- Determinación de la duración y el formato de un archivo de audio