EAO123
EAO123

Reputation: 67

How to compress video after getting result from PHPickerViewController xcode swift

I know that UIImagePickerController allows you to compress media content upon selection. However, I'm not sure how to do the same with PHPickerViewController. How can I compress a video after getting a result (didFinishPicking), (so I can reduce the amount of time to upload and download the data from then on)

Upvotes: 1

Views: 1200

Answers (1)

Vadim Belyaev
Vadim Belyaev

Reputation: 2859

I don't think PHPickerViewController does that, but there are other ways to do it depending on how you work with the picker:

  1. If you're using the default picker configuration (i.e. creating a PHPickerConfiguration without passing the photo library and therefore not having the need to request permissions), you'll have to work with NSItemProvider. From what I learned, the only option might be to save the video to a temporary file using the item provider and the convert it to a lower resolution/bitrate using AVAssetExportSession (see some examples here: How can I reduce the file size of a video created with UIImagePickerController?).

  2. If you are using the picker with an explicitly passed photo library, the PHPickerResult will have the assetIdentifier provided to you, and you can use it to get a respective PHAsset. Then, use PHImageManager's requestAVAsset method to get a video asset of a desired quality. You'll still need to export the AVAsset via AVAssetExportSession though, but with this approach you won't have a (potentially large) full-res temporary file on disk. I was recently working on a open source app that uses this technique, you can find some examples here: https://github.com/vadimbelyaev/TbilisiCleanups/blob/main/TbilisiCleanups/Services/MediaUploadService.swift

Upvotes: 2

Related Questions