Reproducir vídeo en parte de la pantalla
Estoy completamente perplejo en algo que pensé que sería la cosa más fácil que nunca. Estoy tratando de reproducir un video dentro de un marco en un diseño relativo.
Tenga en cuenta que la aplicación está diseñada para ejecutarse en un dispositivo muy específico (ficha Archos 101 Internet) en modo horizontal y los vídeos están pre-codificados con un tamaño muy específico de 480×360, por lo que el diseño tiene algunos tamaños fijos.
- ¿Cómo ejecutar varios videos con diferentes VideoViews en una actividad en android 2.2?
- Reproducción de archivos de vídeo cifrados mediante VideoView
- Cómo modificar el ancho de videoview programatically
- Cómo cerrar Landscape VideoView Activity correctamente?
- Cómo configurar la imagen de vista previa en videoview antes de jugar
Aquí está el diseño
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- Background --> <ImageView android:layout_width="980dp" android:layout_height="568dp" android:src="@drawable/bg_video" /> <TextView android:id="@+id/video_headtext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="73dp" android:layout_marginLeft="255dp" android:textColor="#FFFFFF" android:textSize="16dp" /> <TextView android:id="@+id/video_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFFFFF" android:layout_centerHorizontal="true" android:layout_marginTop="112dp" /> <VideoView android:id="@+id/video_videocontainer" android:layout_width="480dp" android:layout_height="360dp" android:layout_below="@id/video_title" android:layout_marginTop="10dp" android:layout_centerHorizontal="true" /> </RelativeLayout>
Cargo el video usando este código
player = (VideoPlayer) findViewById(R.id.video_videocontainer); player.setVideoURI(videoUri);
El código funciona, pero mientras que el videoView está correctamente dentro del marco, el propio video se reproduce en algún lugar en la parte superior de la pantalla, y sólo una parte de él se muestra en el VideoView.
Ejemplo de lo que sucede aquí (Esto es sólo un video temporal para depurar). Captura de pantalla del video en el mismo momento aquí .
Como se puede ver, el VideoView sólo muestra parte del video, llenando el resto con negro.
Estoy bastante seguro de que estoy perdiendo algo realmente simple, pero no puedo averiguar qué.
Gracias por adelantado.
EDIT: He intentado escribir una clase VideoPlayer que extiende VideoView y sobreescribe onMeasure como este
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(480, 360); } public void changeVideoSize() { getHolder().setFixedSize(480, 360); requestLayout(); invalidate(); }
Pero no ayuda un solo bit.
EDIT 2: Probado con un SurfaceView y MediaPlayer, el mismo resultado. Tengo la sensación de que no he entendido el principio de reproducir un video en Android. Estoy bastante atrapado aquí.
EDIT 3: He intentado en un Samsung Galaxy HD y el video se muestra correctamente dentro del marco. Me pregunto si esto es un problema con la tableta, o con 2.2?
EDIT 4: AVD que funciona bajo 2.2 no hace el vídeo correctamente. AVD ejecutando 4.1 hace. Supongo que se reduce un poco.
- Reanudar la reproducción de VideoView desde onResume
- Android 2.2 VideoView problema
- Cómo detectar si VideoView está reproduciendo video o Buffering?
- Android: ¿Por qué no puedo dar un onClickListener a un VideoView?
- ¿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
- Cómo crear círculo o videoView redondo en android?
- Problema con la vista de vídeo en android 4.0 y superior
Tuve un problema similar con un video que tenía un alto perfil demasiado para que el dispositivo en particular (2.1) para ser manejado y funcionó bien para Android 4.0.
Aparte de eso, estoy usando SurfaceView y el truco era agregar oyentes a los eventos para el MediaPlayer (setOnVideoSizeChangedListener en particular) y la devolución de llamada a la superficie vinculada a los eventos mediaplayer.
Establezca el atributo VideoView setZOrderOnTop como verdadero y ver si funciona. Por ejemplo, si tengo una videovista llamada qvideo
qvideo.setZOrderOnTop(true);
- La metaetiqueta del visor no funciona
- La mejor manera de obtener la cuenta de pasos diarios del usuario para enviar al servidor en segundo plano