2011-11-03 10 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の定数を使用します。 API 10+のため

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

トリック:だから、このような何かをしたい

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

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

私たちは、ビデオからのランダムなフレームを取り、その幅と高さを検出する簡単です。あなたがビデオコンテンツURIを持っている場合は

0

は、あなたも絶対に華麗なようだ

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

関連する問題