当使用AVAssetExportSession
导出视频时,可能会遇到进度不更新的问题。这可能是由于导出会话没有正确地更新进度回调导致的。下面是一种解决方法:
首先,确保你的AVAssetExportSession
实例设置了exportProgress
属性的观察者。你可以使用KVO (Key-Value Observing)
来观察进度属性的变化。
// 创建AVAssetExportSession实例
let exportSession = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetMediumQuality)
// 设置进度观察者
exportSession?.addObserver(self, forKeyPath: "progress", options: .new, context: nil)
然后在你的观察者方法中,更新进度值并执行相关操作。在这个例子中,我们将进度值打印到控制台。
override func observeValue(forKeyPath keyPath: String?,
of object: Any?,
change: [NSKeyValueChangeKey : Any]?,
context: UnsafeMutableRawPointer?) {
if keyPath == "progress" {
let progress = exportSession.progress
print("Export Progress: \(progress)")
// 执行其他操作,比如更新进度条等
}
}
最后,在导出会话完成后,记得移除观察者。
exportSession?.removeObserver(self, forKeyPath: "progress")
通过以上步骤,你应该能够正确地观察到AVAssetExportSession
的进度,并相应地更新UI。