iOS Video Pre Processing

Adi Mizrahi
CodeX
Published in
4 min readSep 17, 2024
Photo by Wahid Khene on Unsplash

Introduction

Imagine this: you’re on vacation, you shoot an amazing 4K video, and now you want to upload it to the cloud to share with your friends or store it safely. However, as soon as you hit “upload,” you find that the file is too large, or worse, the app crashes because it’s trying to handle too much data at once. We’ve all been there. This is where Cloudinary’s iOS SDK comes to the rescue. In this post, we’ll talk about how we can efficiently compress, format, and validate videos before uploading them, using a feature from the Cloudinary iOS SDK. This feature ensures that your large videos are uploaded quickly, smoothly, and without unnecessary memory overhead.

Let’s dive into how you can use the Cloudinary iOS SDK to handle large video files, compress them, and optimize the upload experience!

Why Compress Video Before Uploading?

Videos these days are incredibly detailed, especially with smartphones capturing high-resolution 4K and even 8K footage. However, higher resolution means larger file sizes, and that creates a few problems:

  1. Bandwidth: Uploading large video files can consume a lot of data. Not everyone has a fast or unlimited internet connection.
  2. Upload Time: Large files take longer to upload, leading to frustrating delays.
  3. Memory Consumption: Handling large files all in memory can cause apps to crash due to limited resources on mobile devices.

To solve these issues, we compress videos before uploading. Compression reduces the file size while maintaining quality, making it easier to handle, upload, and store.

How Cloudinary’s Preprocessing Feature Simplifies Video Uploads

Cloudinary’s iOS SDK offers a feature called Preprocessing, which allows developers to resize, compress, and validate videos before they are uploaded. The SDK handles these operations in a chain, making it easy to fine-tune each step of the upload process.

Here’s how the preprocessing chain works:

let preprocessChain = CLDVideoPreprocessChain()
.addStep(CLDVideoPreprocessHelpers.setOutputDimensions(dimensions: CGSize(width: 640, height: 640)))
.addStep(CLDVideoPreprocessHelpers.setOutputFormat(format: .mov))
.addStep(CLDVideoPreprocessHelpers.setCompressionPreset(preset: AVAssetExportPresetHighestQuality))
.addStep(CLDVideoPreprocessHelpers.dimensionsValidator(minWidth: 100, maxWidth: 2000, minHeight: 100, maxHeight: 1000))

What Does Each Function Do?

Let’s break down the different steps in the preprocessing chain:

Set Output Dimensions

.addStep(CLDVideoPreprocessHelpers.setOutputDimensions(dimensions: CGSize(width: 640, height: 640)))

This step resizes the video to the specified dimensions. In this example, we’ve resized the video to 640x640 pixels, which is great for social media or any platform where a smaller size is preferred.

Set Output Format

.addStep(CLDVideoPreprocessHelpers.setOutputFormat(format: .mov))

Videos can be exported in different formats, such as .mov or .mp4. This step allows you to change the format to ensure compatibility with the platform where the video will be uploaded.

Set Compression Preset

.addStep(CLDVideoPreprocessHelpers.setCompressionPreset(preset: AVAssetExportPresetHighestQuality))

Compression presets are used to balance between quality and file size. You can choose different presets like highest quality or medium quality, depending on your use case. In this case, we’re maintaining the highest quality possible while still compressing the file.

Validate Dimensions

.addStep(CLDVideoPreprocessHelpers.dimensionsValidator(minWidth: 100, maxWidth: 2000, minHeight: 100, maxHeight: 1000))

The dimensions validator ensures that your video falls within a specific range of width and height. For example, this step checks that the video is at least 100x100 pixels and no more than 2000x1000 pixels. This can prevent uploading unreasonably large videos that could cause issues.

A Real-World Example

Imagine you’re developing an app where users can upload videos to a social media platform. The videos need to be compressed for faster upload and converted to a compatible format. Their size should be within certain limits to avoid slowing down the app or breaking the user experience.

Here’s how you could use the Cloudinary iOS SDK to make this process smooth:

let preprocessChain = CLDVideoPreprocessChain()
.addStep(CLDVideoPreprocessHelpers.setOutputDimensions(dimensions: CGSize(width: 640, height: 640)))
.addStep(CLDVideoPreprocessHelpers.setOutputFormat(format: .mov))
.addStep(CLDVideoPreprocessHelpers.setCompressionPreset(preset: AVAssetExportPresetHighestQuality))
.addStep(CLDVideoPreprocessHelpers.dimensionsValidator(minWidth: 100, maxWidth: 2000, minHeight: 100, maxHeight: 1000))

let params = CLDUploadRequestParams()
params.setResourceType("video")

cloudinary.createUploader().upload(url: url as URL, uploadPreset: "ios_sample", params: params, preprocessChain: preprocessChain, completionHandler: { response, error in
if let response = response {
// Handle success, e.g., save the uploaded video details to the database
} else if let error = error {
// Handle the error, e.g., show a message to the user
}
})

This example shows how you can configure the video upload, including setting the resource type, applying the preprocessing chain, and handling the response or error after the upload completes.

Conclusion

Uploading large videos doesn’t have to be a pain. By using Cloudinary’s iOS SDK, you can take advantage of preprocessing features that compress, resize, and validate your videos before uploading. This ensures faster uploads, reduced memory usage, and a smoother user experience.

Whether you’re building a video-sharing app or just want to streamline your app’s upload functionality, this preprocessing chain is a must-have tool. It takes the complexity out of handling large files and gives developers the flexibility to fine-tune their uploads.

If you haven’t already, give the Cloudinary iOS SDK a try and see how it can optimize video uploads in your app!

Ready to make your app’s video uploads smoother? Get started with the Cloudinary iOS SDK and explore all the features today!

--

--