2011-11-03 166 views
13

我正在尋找一種方法來獲取Android中任何給定視頻的分辨率。它不需要使用Android以外的其他格式,但如果可以的話,它會很棒。如果您在Android的不確定所支持的格式,請參見本頁面:是否有可能在Android中獲得視頻的分辨率?

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

我認爲這是可以做到我想用MediaPlayer類的東西,但似乎令人難以置信的愚蠢,效率低下。另外,我想要的方式是相對較快

我針對Android 3.0+,如果這有什麼區別。 Honeycomb也支持.mkv文件,但直到Android 4.0才正式支持。

回答

40

您可以使用MediaMetadataRetriever來檢索有關視頻文件的分辨率信息。您將使用extractMetadata()方法並使用METADATA_KEY_VIDEO_HEIGHTMETADATA_KEY_VIDEO_WIDTH常數。所以,你會做這樣的事情:

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

這似乎是絕對精彩!簡直不敢相信我以前從來沒有聽說過那個班。非常感謝! :) –

+4

Pre-Honeycomb有沒有簡單的方法? –

+0

MediaMetadataRetriever需要API等級14 – erdomester

3

伎倆API 10+:

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

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

我們簡單採取從我們的視頻隨機幀並檢測其寬度和高度。

0

如果您有視頻內容的URI,那麼你也可以使用內容提供商查詢

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

相關問題