Skip to content

testfairy-blog/VideoCompressionTutorial

Repository files navigation

Video Compression Tutorial

iOS - Fine tuned video compression in Swift 4. Code materials for this blog post.

Check out other branches for different versions of Swift.

Features

  • 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.beginBackgroundTask must be called explicitly)

Install

Copy this file to your project.

Usage

// Get source video
let videoToCompress = //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
let cancelable = compressh264VideoInBackground(
    videoToCompress: videoToCompress,
    destinationPath: destinationPath,
    size: nil, // nil preserves original,
    //size: (width: 1280, height: 720) 
    compressionTransform: .keepSame,
    compressionConfig: .defaultConfig,
    completionHandler: { [weak self] path in
        // use path
    },
    errorHandler: { e in
        print("Error: ", e)
    },
    cancelHandler: {
        print("Canceled.")
    }
)

// To cancel compression, set cancel flag to true and wait for handler invoke
cancelable.cancel = true

How to initiate a background task (i.e while the phone is locked)

Please refer to the discussion here.

About

iOS - Fine tuned video compression in Swift 4

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages