How to pause and resume AVAssetExportSession while exporting a video composition

Viewed 500

I'm trying to export a rotated video using AVAssetExportSession, and want to pause and resume AVAssetExportSession at button click.

    var exportSession = AVAssetExportSession.init(asset: composition, presetName: AVAssetExportPresetHighestQuality) 
    exportSession?.videoComposition = videoComposition
    exportSession?.outputFileType = AVFileType.mov
    exportSession?.outputURL = URL.init(fileURLWithPath: videoPath)
    exportSession?.videoComposition = videoComposition
    var exportProgress: Float = 0
    let queue = DispatchQueue(label: "Export Progress Queue")

    queue.async(execute: {() -> Void in

        while exportSession != nil {
            exportProgress = (exportSession?.progress)!
            print("current progress == \(exportProgress)")
            }
            sleep(1)
        }
    })

    exportSession?.exportAsynchronously(completionHandler: {
        if exportSession?.status == AVAssetExportSessionStatus.failed {
            print("Failed \(exportSession?.error?.localizedDescription)")
             exportSession = nil

        } else if exportSession?.status == AVAssetExportSessionStatus.completed {
            exportSession = nil
           VideoSave.saveVideoToPhotoLibrary(URL.init(fileURLWithPath: videoPath), error: nil)
       }

    })

let suppose if a video whose export progress is completed 50%. So I pause its export process at 50% then resume it again. It should resume from 50% where it was paused before.

0 Answers
Related