在我的 iOS 应用程序中,我使用 AVAssetExportSession 来压缩视频文件
if let exportSession = AVAssetExportSession(asset: singleVideoComposition, presetName: AVAssetExportPresetMediumQuality) {
exportSession.outputFileType = .mp4
exportSession.timeRange = videoTrack.timeRange
await exportSession.export() // cause a main thread to stall when called for the very first time
if exportSession.status == .completed {
completion(outputURL)
} else {
completion(nil)
}
}
此代码在
Task
内部运行。问题是 - 在第一次压缩时,它会使主线程停止 1-2 秒,这会导致 UI 中出现不愉快的感觉。第一次使用后,它根本不会停止主线程,它在后台运行,UI 漂亮流畅。
为什么会发生这种情况以及如何解决这个问题?谢谢!
只要我的2分钱。
此代码在任务中运行
如果您从主要参与者创建
Task
,那么您将在主要参与者本身上运行代码。
要检查是否添加此行
print("Task.isMainActor: \(Task.isMainActor)")
确定了你是主角之后,我们就重点关注这个吧
await exportSession.export()
我们不知道导出函数在哪里运行操作。
但是你可以尝试! 在后台线程上运行整个代码,看看延迟是否消失。
Task(priority: .background) {
}