Android MediaMetadataRetriever неверная высота и ширина видео
Я хочу получить высоту и ширину видео, для этого я использую класс MediaMetadataRetriever. Это работает правильно для большинства случаев, но в некоторых случаях высота и ширина корпуса меняются местами.
Я думаю, что это может происходить из-за смены ориентации.
Мой текущий код:
MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();
metaRetriever.setDataSource(videoPath);
videoHeight = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
videoWidth = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
Как я могу получить правильные значения? Спасибо
2 ответа
Я пытался выяснить это сам в течение последнего дня или около того, мне в конечном итоге пришлось решить это экспериментально.
File file = new File(path);
if (file.exists()) {
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(file.getAbsolutePath());
String metaRotation = retriever.extractMetadata(METADATA_KEY_VIDEO_ROTATION);
int rotation = metaRotation == null ? 0 : Integer.parseInt(metaRotation);
Log.i("Test", "Rotation = " + rotation);
}
Если вращение составляет 90 или 270, ширина и высота будут транспонированы.
Спасибо за ответ Кейта. Вот полный метод Java.
void getWidthAndHeightOfVideo(String filePath) {
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(filePath);
String metaRotation = retriever.extractMetadata(METADATA_KEY_VIDEO_ROTATION);
int rotation = metaRotation == null ? 0 : Integer.parseInt(metaRotation);
String widthString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
String heightString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
if (rotation == 90 || rotation == 270) {
videoWidth = Integer.parseInt(heightString);
videoHeight = Integer.parseInt(widthString);
} else {
videoWidth = Integer.parseInt(widthString);
videoHeight = Integer.parseInt(heightString);
}
Log.e(TAG, "getWidthAndHeightOfVideo: " + videoHeight + " AA " + videoWidth);
try {
retriever.release();
} catch (IOException e) {
throw new RuntimeException(e);
}
}