AVAssetExportSession是一个用于生成媒体文件的类,可以使用 KVO 监控它的输出状态。通过监控状态,我们可以了解到导出媒体文件过程中的进展情况。在Swift代码中,可以通过如下方式实现此功能:
// 创建 AVAssetExportSession 并设置其导出类型、路径等属性
let exportSession = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetMediumQuality)!
exportSession.outputFileType = AVFileType.mp4
exportSession.outputURL = outputURL
// 监听输出状态并更新 UI
exportSession.addObserver(self, forKeyPath: #keyPath(AVAssetExportSession.status), options: .new, context: nil)
// 监听状态变化并更新 UI,KVO 观察者方法
override func observeValue(forKeyPath keyPath: String?,
of object: Any?,
change: [NSKeyValueChangeKey : Any]?,
context: UnsafeMutableRawPointer?) {
if keyPath == #keyPath(AVAssetExportSession.status) {
switch exportSession.status {
case .unknown, .waiting, .exporting:
// 显示导出中的进度条等 UI
break
case .completed:
// 导出完成,做出相应处理
break
case .failed, .cancelled:
// 导出失败或取消,打印错误信息
if let error = exportSession.error {
print("Export failed: \(error.localizedDescription)")
}
break
@unknown default:
break
}
}
}
注意:在使用监听 KVO 时要确保在不需要时移除观察者,以避免内存泄漏。可以在适当的时候移除观察者:
// 移除 KVO 观察者
exportSession.removeObserver(self, forKeyPath: #keyPath(AVAssetExportSession.status))