2012-01-31 10 views
11

ビデオファイルがあり、ビデオの幅と高さを取得したいと思います。私はそれを再生したくない、ちょうどサイズを取得する。 私はMediaPlayerの使用を試みた:Androidでビデオの幅と高さを判断する方法

MediaPlayer mp = new MediaPlayer(); 
mp.setDataSource(uriString); 
mp.prepare(); 
int width = mp.getVideoWidth(); 
int height = mp.getVideoHeight(); 

をしかしVideoSizeChangedEventがまだ起動しませんでしたので、それは、幅と高さに0を返します。 ビデオの幅と高さを取得するにはどうすればよいですか?

UPD:私は、システムのコンテンツプロバイダから照会するために、これを試してください7

答えて

0
private static final Uri MOVIE_URI = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; 
private static final String[] MOVIE_PJT = new String[] { 
     MediaStore.Video.Media._ID, MediaStore.Video.Media.DATA, 
     MediaStore.Video.Media.TITLE, MediaStore.Video.Media.DATE_TAKEN, 
     MediaStore.Video.Media.MIME_TYPE, MediaStore.Video.Media.DURATION, 
     MediaStore.Video.Media.SIZE, MediaStore.Video.Media.RESOLUTION }; 

APIのバージョンが必要です。

// get video dimensions 
MediaPlayer mp = new MediaPlayer(); 
     try { 
      mp.setDataSource(filename); 
      mp.prepare(); 
      mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() { 
       @Override 
       public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { 

        int orient = -1; 

        if(width < height) 
         orient = 1; 
        else 
         orient = 0; 

       } 
      }); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (SecurityException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
+0

時間の少なくとも一部、 'RESOLUTION'がnullを。 (私はそれが非ヌルであるかどうかはまだ分かっていないが、 'RESOLUTION'が利用できないときに解決策を探す方法を探している(Gingerbreadやそれ以上のもの) –

14

を返します。 APIレベル10で動作し、最大:

MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 
retriever.setDataSource("/path/to/video.mp4"); 
int width = Integer.valueOf(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)); 
int height = Integer.valueOf(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)); 
retriever.release(); 
+0

申し訳ありませんが、私はAPIのverion 7が必要なので、MediaMetadataRetrieverはありません – mao

+0

私のプロジェクトのres/rawフォルダ内のファイル、適切な文字列を取得する方法はわかりません。 – Lennert

+0

ksよりそれはトリックでした!!! –

6

APIレベル7ソリューションこのコードを試してみて、すべての問題なら、私に知らせてビデオのいくつかの有用な情報(ローカルファイル)

10

この:それは...

MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 
Bitmap bmp = null;  

try 
{ 
    retriever.setDataSource("...location of your video file"); 
    bmp = retriever.getFrameAtTime(); 
    videoHeight=bmp.getHeight(); 
    videoWidth=bmp.getWidth(); 
} 
+0

動作しますが、アンドロイド6.0で動作していません –

+0

@TigranSarkisianはアンドロイド6.0でアプリクラッシュを起こしますか? –

+0

API 10の後で動作しますが、パスが無効であるかファイルが存在しない場合は 'IllegalArgumentException'をスローします。存在する。 –

5

これは私

を働きました
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
      public void onPrepared(final MediaPlayer mp) { 
       int width = mp.getVideoWidth(); 
       int height = mp.getVideoHeight(); 
      } 
     }); 
2

このset of utilitiesは、Androidのサイズ抽象化で動作します。

それはあなたがこのようにそれを使用することができ、クラスSizeFromVideoFile.java 含まれています

ISize size = new SizeFromVideoFile(videoFilePath); 
size.width(); 
size.hight(); 
関連する問題