Как определить ширину и высоту видео на Android

У меня есть видеофайл, и я хочу получить ширину и высоту видео. Я не хочу играть в нее, просто чтобы получить размер. Я попытался использовать MediaPlayer:

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

Но он возвращает 0 для ширины и высоты, потому что VideoSizeChangedEvent еще не срабатывает. Как получить ширину и высоту видео?

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:

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

    Попробуйте выполнить запрос от поставщика системного контента. Он вернет некоторую полезную информацию о видео (локальные файлы)