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.

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.

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); 
  • Android VideoView inicia muchos videos secuencialmente
  • Mostrar y ocultar un botón de reproducción sobre un VideoView en Android
  • VideoView con cookies (o encabezados)
  • Tamaño de la memoria intermedia de Android VideoView
  • Problema de parpadeo de VideoView
  • Android: VideoView dentro de Fragmento sólo reproduce audio, no muestra vídeo
  • Uso de VideoView para streaming o video de descarga progresiva
  • VideoView: Evitar el flash negro de pantalla completa
  • VideoView en bucle de videos Replenish
  • VideoView flash negro antes y después de jugar
  • Zooming VideoView para rellenar el ancho, manteniendo la relación de aspecto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.