Как определить ширину и высоту видео на Android
У меня есть видеофайл, и я хочу получить ширину и высоту видео. Я не хочу играть, просто чтобы получить размер.
Я попытался использовать MediaPlayer:
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(uriString);
mp.prepare();
int width = mp.getVideoWidth();
int height = mp.getVideoHeight();
но он возвращает 0 для ширины и высоты, потому что VideoSizeChangedEvent еще не срабатывает.
Как получить ширину и высоту видео?
UPD: мне нужна версия API 7
Ответы
Ответ 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 };
попробуйте выполнить запрос от поставщика системного контента. Он вернет некоторую полезную информацию о видео (локальные файлы)