Я пытаюсь разрешить пользователю отменить экспорт серии видео во время экспорта в середине (цель: отменить оставшиеся неожиданные видео).
Код для кнопки:
var cancelExportButton = UIButton()
cancelExportButton.addTarget(self, action: #selector(cancelExport(sender:)), for: .touchUpInside)
@objc func cancelExport(sender: UIButton!) {
print("export cancelled")
//cancel remaining exports code
}
for i in 0...videoURLs.count - 1 {
overlayVideo(titleImage: titleImage, captionImage: captionImage, videoURL: videoURLs[i])
}
func overlayVideo(titleImage: UIImage, captionImage: UIImage, videoURL: URL) {
//...composition and mixing code, not important to exporting
// Exporting
let number = Int.random(in: 0...99999)
let savePathUrl: URL = URL(fileURLWithPath: NSHomeDirectory() + "/Documents/\(number).mp4")
do { // delete old video
try FileManager.default.removeItem(at: savePathUrl)
} catch { print(error.localizedDescription) }
let assetExport: AVAssetExportSession = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetHighestQuality)!
assetExport.videoComposition = layerComposition
assetExport.outputFileType = AVFileType.mov
assetExport.outputURL = savePathUrl
assetExport.shouldOptimizeForNetworkUse = true
assetExport.exportAsynchronously { () -> Void in
switch assetExport.status {
case AVAssetExportSessionStatus.completed:
print("success")
case AVAssetExportSessionStatus.failed:
print("failed \(assetExport.error?.localizedDescription ?? "error nil")")
case AVAssetExportSessionStatus.cancelled:
print("cancelled \(assetExport.error?.localizedDescription ?? "error nil")")
default:
print("complete")
}
}
}
Какой код (с использованием очередей или свойств мониторинга) будет работать в cancelExport
, чтобы отменить все оставшиеся экземпляры функций / неэкспортированные активы?
Я пытался превратить assetExport
в класс переменная и установка ее на ноль после успешного экспорта, но экспорт выполняется в то же время, поэтому это испортит.