Вы можете попробовать это:
extension AVAsset {
func getPreviewImage(for timeInSeconds: Int = 0) -> UIImage? {
let imageGenerator = AVAssetImageGenerator(asset: self)
imageGenerator.requestedTimeToleranceBefore = .zero
imageGenerator.requestedTimeToleranceAfter = .zero
imageGenerator.appliesPreferredTrackTransform = true
guard let cgImage = try? imageGenerator.copyCGImage(at: CMTime(value: CMTimeValue(timeInSeconds), timescale: 1), actualTime: nil) else { return nil }
return UIImage(cgImage: cgImage)
}
}
Вы не должны получать предварительный просмотр в главном потоке.
Если вам требуется серия изображений для предварительного просмотра, вы можете попробовать this :
Если вам требуется серия изображений, вы можете добиться гораздо большей эффективности с помощью асинхронного метода generateCGImagesAsynchronously (forTimes: завершениюHandler :), который использует эффективность декодирования, аналогичную эффективности, используемой во время воспроизведение.