2012-01-31 248 views
11

我有一個視頻文件,我想獲得視頻的寬度和高度。我不想玩它,只是爲了獲得大小。 我試着使用的MediaPlayer:如何確定Android上的視頻寬度和高度

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

,但它的寬度和高度,則返回0,因爲VideoSizeChangedEvent還不火。 如何獲得視頻的寬度和高度?

UPD:我需要的API版本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 }; 

嘗試這個系統由內容提供商來查詢。它會返回影片的一些有用的信息(本地文件)

+0

至少在某些時候,'RESOLUTION'爲空。 (我還不確定什麼時候它是非空的,但是當我遇到'RESOLUTION'時,我遇到了這個問題尋找解決方法(在薑餅上,唉) – 2012-02-15 01:11:32

14

嘗試使用此代碼,讓我知道,如果任何問題..

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

6

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

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

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(); 
相關問題