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

时间:2012-01-31 09:52:49

标签: android video media-player android-videoview

我有一个视频文件,我希望获得视频的宽度和高度。我不想玩它,只是为了获得尺寸。 我试过使用MediaPlayer:

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

但它的宽度和高度返回0,因为VideoSizeChangedEvent尚未触发。 如何获得视频的宽度和高度?

UPD:我需要API版本7

6 个答案:

答案 0 :(得分:21)

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

答案 1 :(得分:17)

尝试使用此代码,如果有任何问题,请告诉我。

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

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

答案 2 :(得分:10)

这对我有用

enums

答案 3 :(得分:7)

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

答案 4 :(得分: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 };

尝试从系统内容提供商处查询。它将返回视频(本地文件)的一些有用信息

答案 5 :(得分:0)

这个set of utilities可以与Android中的大小抽象一起使用。

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

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