Подтвердить что ты не робот

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

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

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

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

UPD: мне нужна версия API 7

4b9b3361

Ответ 1

попробуйте этот код и дайте мне знать, если возникнут какие-либо проблемы.

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

Это работает на уровне 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();

Ответ 3

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

Это сработало для меня

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

Ответ 5

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

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