Intereting Posts
   

如何确定Android上的video宽度和高度

我有一个video文件,我想获得video的宽度和高度。 我不想玩,只是为了得到大小。 我试过使用MediaPlayer:

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

但是它的宽度和高度返回0,因为VideoSizeChangedEvent还没有激发。 我怎样才能获得video的宽度和高度?

UPD:我需要API版本7

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

 MediaMetadataRetriever retriever = new MediaMetadataRetriever(); Bitmap bmp = null; try { retriever.setDataSource("...location of your video file"); bmp = retriever.getFrameAtTime(); videoHeight=bmp.getHeight(); videoWidth=bmp.getWidth(); } 

这适用于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(); 

API级别7解决scheme:

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

这对我有效

 videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(final MediaPlayer mp) { int width = mp.getVideoWidth(); int height = mp.getVideoHeight(); } }); 
 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 }; 

试试这个从系统内容提供者查询。 它会返回一些有用的信息的video(本地文件)