iOS - Fine tuned video compression in Swift 5
Forked from VideoCompressionTutorial
- Changes :
- Added Swift 5 support
- Added Compression Progress Handler
- Added Result type completion handler
- Handled device camera video orientation fix automatically
- iOS 9+
- No dependencies
- Single file, single function
- Compression in background thread
- Cancelable
- Configurable a/v bitrate, video resolution, audio sample rate and many other fine tuning operations
- Proper orientation correction for back/front camera
- Low performance compression during Background Execution, even when device is locked. (
Application.beginBackgroundTaskmust be called explicitly) - Progress Handling
Copy this file to your project.
// Get source video
letvideoToCompress= //any valid URL pointing device storage
// Declare destination path and remove anything exists in it
let destinationPath =URL(fileURLWithPath:NSTemporaryDirectory()).appendingPathComponent("compressed.mp4")try?FileManager.default.removeItem(at: destinationPath)
// Compress
letcancelable=compressh264VideoInBackground(
videoToCompress: videoToCompress,
destinationPath: destinationPath,
size:nil, // nil preserves original,
//size: (width: 1280, height: 720) compressionConfig:.defaultConfig,
progressQueue:.main,
progressHandler:{ progress in // Handle Progress
},
completion:{[weak self] result inswitch result {case.success(let url):
// Handle destination URL
case .failure(let error):
// Handle Error
case.cancelled:
// Handle Cancelled case
}})
// To cancel compression, set cancel flag to true and wait for handler invoke
cancelable.cancel =true