2011-11-03 7 views
13

Sto cercando un modo per ottenere la risoluzione di qualsiasi dato video in Android. Non deve funzionare con altri formati rispetto a quelli supportati in Android, ma sarebbe bello se lo facesse. Se non siete sicuri dei formati supportati in Android, si prega di fare riferimento a questa pagina:È possibile ottenere la risoluzione di un video in Android?

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

Penso che sia possibile fare ciò che voglio utilizzando la classe MediaPlayer, ma che sembra incredibilmente stupido e inefficiente. Inoltre, mi piacerebbe un modo che sia relativamente veloce.

Ho scelto Android 3.0+, se questo fa alcuna differenza. Honeycomb supporta anche i file .mkv, anche se non è ufficialmente supportato fino a Android 4.0.

risposta

40

È possibile utilizzare MediaMetadataRetriever per recuperare le informazioni sulla risoluzione di un file video. Dovresti utilizzare il metodo extractMetadata() e utilizzare le costanti METADATA_KEY_VIDEO_HEIGHT e METADATA_KEY_VIDEO_WIDTH. Così si farebbe qualcosa di simile:

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

che sembra assolutamente geniale! Non posso credere di non aver mai sentito parlare di quella lezione prima d'ora. Molte grazie! :) –

+4

C'è un modo semplice per Pre-Honeycomb? –

+0

MediaMetadataRetriever richiede il livello API 14 – erdomester

3

trucco per API 10+:

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

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

Ci sono semplici prendendo un fotogramma a caso dal nostro video e rilevare la sua larghezza e altezza.

0

Se si dispone di contenuti video URI allora si può anche utilizzare i contenuti di query fornitore

Come

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

Problemi correlati