            // actually we want to return just the first item, but array.getMap returns ReadableMap
            // which is not compatible with promise.resolve and there is no simple solution to convert
            // ReadableMap to WritableMap so it's easier to return an array and pick the first item on JS side
-@@ -126,7 +131,7 @@ final class MediaLibraryUtils {
+@@ -126,7 +133,7 @@ final class MediaLibraryUtils {
      }
    }
  

         EXTERNAL_CONTENT,
         ASSET_PROJECTION,
         selection,
@@ -109,7 +114,7 @@ final class MediaLibraryUtils {
         if (asset.getCount() == 1) {
           asset.moveToFirst();
           ArrayList<Bundle> array = new ArrayList<>();

         }
 
         asset.putString("localUri", localUri);
@@ -213,25 +227,68 @@ final class MediaLibraryUtils {
     return MEDIA_TYPES.get(mediaType);
   }
 
-  static int[] getSizeFromCursor(Cursor cursor, int mediaType, int localUriIndex){
+  static int[] getSizeFromCursor(ContentResolver contentResolver, ExifInterface exifInterface, Cursor cursor, int mediaType, int localUriIndex) throws IOException {
+    final String uri = cursor.getString(localUriIndex);
+
+    if (mediaType == Files.FileColumns.MEDIA_TYPE_VIDEO) {
+      Uri videoUri = Uri.parse("file://" + uri);
+      MediaMetadataRetriever retriever = null;
+      try (AssetFileDescriptor photoDescriptor = contentResolver.openAssetFileDescriptor(videoUri, "r")) {
+        retriever = new MediaMetadataRetriever();
+        retriever.setDataSource(photoDescriptor.getFileDescriptor());
+        int videoWidth = Integer.parseInt(
+          retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)
+        );
+        int videoHeight = Integer.parseInt(
+          retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)
+        );
+        int videoOrientation = Integer.parseInt(
+          retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION)
+        );
+        return maybeRotateAssetSize(videoWidth, videoHeight, videoOrientation);
+      } catch (NumberFormatException e) {
+        Log.e("expo-media-library", "MediaMetadataRetriever unexpectedly returned non-integer: " + e.getMessage());
+      } catch (FileNotFoundException e) {
+        Log.e("expo-media-library", String.format("ContentResolver failed to read %s: %s", uri, e.getMessage()));
+      } finally {
+        if (retriever != null) {
+          retriever.release();
+        }
+      }
+    }
+
