Код для решения, которое использует AVFoundation
framework и Swift 3.0 (закомментированный код не нужен и обсуждается ниже кода - вы должны решить, нужен он вам или нет):
import AVFoundation
func generateThumbnailForVideo(at url: URL) -> UIImage? {
let kPreferredTimescale: Int32 = 1000
let asset = AVURLAsset(url: url)
let generator = AVAssetImageGenerator(asset: asset)
generator.appliesPreferredTrackTransform = true
//generator.requestedTimeToleranceBefore = kCMTimeZero
//generator.requestedTimeToleranceAfter = kCMTimeZero
//generator.maximumSize = CGSize(width: 100, height: 100)
var actualTime: CMTime = CMTime(seconds: 0, preferredTimescale: kPreferredTimescale)
//generates thumbnail at first second of the video
let cgImage = try? generator.copyCGImage(at: CMTime(seconds: 1, preferredTimescale: kPreferredTimescale), actualTime: &actualTime)
return cgImage.flatMap() { return UIImage(cgImage: $0, scale: UIScreen.main.scale, orientation: .up) }
}
Обратите внимание, что вы можете подумать о запуске этого кода в фоновом потоке, так как создание миниатюр может быть дорогостоящей операцией.
Кроме того, обратите внимание на некоторые свойства класса AVAssetImageGenerator
:
requestedTimeToleranceBefore
( документация Apple ):
Максимальная продолжительность до запрашиваемого времени, в течение которого может быть сгенерировано изображение.
Значением по умолчанию является kCMTimePositiveInfinity.
Установите значения значения selectedTimeToleranceBefore и requiredTimeToleranceAfter для kCMTimeZero, чтобы запросить генерацию изображения с точностью до кадра;это может повлечь дополнительную задержку декодирования.
requestedTimeToleranceAfter
(
документация Apple ):
Максимальный промежуток времени после запрошенного времени, в течение которого может быть сгенерировано изображение.
Значением по умолчанию является kCMTimePositiveInfinity.
Установите значения значения selectedTimeToleranceBefore и requiredTimeToleranceAfter для kCMTimeZero, чтобы запросить генерацию изображения с точностью до кадра;это может повлечь дополнительную задержку декодирования.
maximumSize
(
документация Apple ):
Задает максимальные размеры для сгенерированного изображения.
Значением по умолчанию является CGSizeZero, котороезадает немасштабированные размеры актива.
AVAssetImageGenerator масштабирует изображения таким образом, чтобы они помещались в пределах определенной ограничительной рамки.Изображения никогда не масштабируются.Соотношение сторон масштабированного изображения определяется свойством apertureMode.