2011-11-03 11 views
13

Estoy buscando una manera de obtener la resolución de cualquier video en Android. No tiene que funcionar con otros formatos distintos a los soportados en Android, pero sería genial si lo hiciera. Si no está seguro de los formatos soportados en Android, por favor refiérase a esta página:¿Es posible obtener la resolución de un video en Android?

http://developer.android.com/guide/appendix/media-formats.html

Creo que es posible hacer lo que quiera utilizar la clase MediaPlayer, pero que parece increíblemente estúpida e ineficiente. Además, me gustaría una forma que sea relativamente rápida.

Me estoy orientando a Android 3.0+, si eso hace la diferencia. Honeycomb también es compatible con archivos .mkv, aunque oficialmente no es compatible hasta Android 4.0.

Respuesta

40

Puede usar el MediaMetadataRetriever para recuperar información de resolución sobre un archivo de video. Utilizaría el método extractMetadata() y usaría las constantes METADATA_KEY_VIDEO_HEIGHT y METADATA_KEY_VIDEO_WIDTH. Por lo que haría algo como esto:

MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever(); 
metaRetriever.setDataSource(/* file descriptor or file path goes here */); 
String height = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT); 
String width = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH); 
+0

Eso parece absolutamente brillante! No puedo creer que nunca haya escuchado sobre esa clase. ¡Muchas gracias! :) –

+4

¿Hay alguna manera fácil para Pre-Honeycomb? –

+0

MediaMetadataRetriever requiere el nivel de API 14 – erdomester

3

truco de API 10 +:

MediaMetadataRetriever mRetriever = new MediaMetadataRetriever(); 
mRetriever.setDataSource("video_file_path"); 
Bitmap frame = mRetriever.getFrameAtTime(); 

int width = frame.getWidth(); 
int height = frame.getHeight(); 

Somos sencilla teniendo un marco de azar de nuestro video y detectar su anchura y altura.

0

Si tiene contenido de video URI entonces también se puede utilizar el contenido de la consulta proveedor de

Como

Cursor mediaCursor = getContentResolver().query(
         videoContentURI, 
         {MediaStore.Video.Media.RESOLUTION}, null, null, null); 
     if (mediaCursor != null) { 
        if (mediaCursor.moveToFirst()) { 
     //The resolution of the video file, formatted as "XxY" 
     String resolution=mediaCursor.getString(mediaCursor 
            .getColumnIndex(MediaStore.Video.Media.RESOLUTION)); 
    } 
} 

You can check following post to get ContentURI from video Physical Path

Cuestiones relacionadas