如何确定Android上的视频宽度和高度

问题描述:

我有一个视频文件,我想获得视频的宽度和高度。我不想玩它,只是为了获得大小。 我试着使用的MediaPlayer:如何确定Android上的视频宽度和高度

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

,但它的宽度和高度,则返回0,因为VideoSizeChangedEvent还不火。 如何获得视频的宽度和高度?

UPD:我需要的API版本7

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 }; 

尝试这个系统由内容提供商来查询。它会返回影片的一些有用的信息(本地文件)

+0

至少在某些时候,'RESOLUTION'为空。 (我还不确定什么时候它是非空的,但是当我遇到'RESOLUTION'时,我遇到了这个问题寻找解决方法(在姜饼上,唉) – 2012-02-15 01:11:32

尝试使用此代码,让我知道,如果任何问题..

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

对不起,我忘记写了,我需要API版本7,所以没有MediaMetadataRetriever – mao 2012-01-31 10:13:01

+0

感谢您的代码,但是我不知道如何获得我的项目的res/raw文件夹中的文件的相应字符串,有什么建议? – Lennert 2013-06-13 13:45:17

+0

比ks ,该诀窍! – 2015-08-15 12:36:51

API第7级的解决方案:

// 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(); 
     } 

这工作在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

作品!但不工作在Android 6.0 – 2016-02-05 08:04:22

+0

@TigranSarkisian确实在安卓6.0? – 2017-04-27 04:07:32

+0

它的工作原理API 10后的应用程序崩溃,但它会抛出'IllegalArgumentException'如果路径无效或文件不存在。 – 2017-06-23 10:24:05

这为我工作

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
      public void onPrepared(final MediaPlayer mp) { 
       int width = mp.getVideoWidth(); 
       int height = mp.getVideoHeight(); 
      } 
     }); 

set of utilities与Android的大小抽象的工作。

它包含一个类SizeFromVideoFile.java 您可以使用它像这样:

ISize size = new SizeFromVideoFile(videoFilePath); 
size.width(); 
size.hight();