AVAssetExportSession 状态 kvo 设置

问题描述

我正在使用 AVAssetExportSession。我不确定为什么结果没有显示视频,所以我想观察 AVAssetExportSession 的状态。这是我第一次做 KVO。

AVAssetExportSession.Status

它提到 AVAssetExportSession.Status 是可观察的。我设置了

        guard let export = AVAssetExportSession(
          asset: composition,presetName: AVAssetExportPresetHighestQuality)
          else {
            print("Cannot create export session.")
            fatalError()
        }
        export.observe(\AVAssetExportSession.status,options: .new) {
            export,change in
            print("export.status : \(export.status)")
        }

我执行了导出会话,当我检查异步块中的状态时,它显示已完成。我想查看状态从开始到完成的进度,所以我删除了这段代码打印状态。

export.videoComposition = videoComposition
        export.outputFileType = .mov
        export.outputURL = exportURL
        
        export.exportAsynchronously {
          dispatchQueue.main.async {

          }
        }

我在 kvo 块中设置了断点,但似乎没有任何内容

解决方法

你需要保持对它的引用

var keyVO:NSKeyValueObservation!
func viewDidLoad() {
   super.viewDidLoad() 
   keyVO = export.observe(\AVAssetExportSession.status,options: .new) {  export,change in
      print("export.status : \(export.status)")
   }
}