2012-02-02 21 views
9

capturo un nuevo vídeo en orientación vertical en un dispositivo Android como esto:Android orientación de vídeo retrato mal en VideoView

Intent intent = new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE); 
startActivityForResult(intent, 1886); 

y me da este archivo: "/ mnt/sdcard/DCIM/cámara/vídeo -2012-02-02-10-45-48.mp4"

entonces juego de esta manera:

private VideoView videoView = (VideoView) findViewById(R.id.videoView); 
String videoUrl = "/mnt/sdcard/DCIM/Camera/video-2012-02-02-10-45-48.mp4"; 
videoView.setMediaController(new MediaController(this));  
videoView.setVideoURI(Uri.parse(videoUrl)); 
videoView.start(); 

Aquí está mi archivo de diseño:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 

<VideoView 
    android:id="@+id/videoView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_centerInParent="true" /> 

</RelativeLayout> 

Cuando juego en la galería estándar de Android, la orientación es correcta. Pero cuando reproduzco el video en el VideoView anterior, se gira 90 grados. El paisaje funciona muy bien, el único problema son los videos de retrato.

¿Cómo puedo rotar este video en VideoView?
Además, ¿cómo puedo determinar la orientación mediante programación?

+1

¿Pudo encontrar una solución a este problema? Tengo el mismo problema – Thatdude1

Respuesta

1

Primero debe determinar la orientación del video capturado. La mayoría de los teléfonos inteligentes nuevos usan orientación horizontal para la cámara, aunque hay versiones que usan el retrato. Para determinar la orientación, puede tomar la longitud y el ancho del marco y luego compararlos. Cuando comiences a verificar si ese video de orientación de la actividad, y dependiendo de las actividades de cambio de orientación.

Código Ejemplo:

public class MainActivity extends ActionBarActivity { 

    String videoUrl = "/mnt/sdcard/DCIM/100ANDRO/MOV_9195.mp4"; 
    int videoWidth; 
    int videoHeight; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getVideoAspectRatio(); 
     if (isVideoLandscaped()) { 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
     } 

     setContentView(R.layout.activity_main); 
     VideoView videoView = (VideoView) findVewById(R.id.videoView); 
     videoView.setMediaController(new MediaController(this)); 
     videoView.setVideoURI(Uri.parse(videoUrl)); 
     videoView.start(); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    private void getVideoAspectRatio() { 
     MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever(); 
     mediaMetadataRetriever.setDataSource(this, Uri.parse(videoUrl)); 
     String height = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT); 
     String width = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH); 
     videoWidth = Integer.parseInt(width); 
     videoHeight = Integer.parseInt(height); 
    } 

    private boolean isVideoLandscaped() { 
     if (videoWidth > videoHeight) { 
      return true; 
     } else return false; 
    } 
} 

No se olvide de ocultar la Barra de acciones en los estilos, o mediante programación en la actividad.

Cuestiones relacionadas