思路:把視頻分片,然后截取每一片截取圖片,回調(diào)的是每一片中的一張圖片。
private func getImage(url: URL, callback: @escaping (UIImage?) ->Void) {
//1. 獲取視頻時(shí)長(zhǎng)
let urlAsset = AVURLAsset(url: url)
let seconds = urlAsset.duration.seconds
print("second: \(seconds)")
//2. 截圖配置
let generator = AVAssetImageGenerator(asset: urlAsset)
generator.appliesPreferredTrackTransform = true
generator.maximumSize = playerView.bounds.size
generator.requestedTimeToleranceBefore = .zero
generator.requestedTimeToleranceAfter = .zero
//3. 分段截圖時(shí)間數(shù)組
var times: [NSValue] = []
for i in 1...Int(seconds) {
let timeM = CMTimeMake(value: Int64(i), timescale: 1)
let timeV = NSValue(time: timeM)
times.append(timeV)
}
print("times: \(times), count: \(times.count)")
//4. 開(kāi)始截圖
generator.generateCGImagesAsynchronously(forTimes: times) {
(requestedTime, cgimage, actualTime, result, error) in
switch result {
case .cancelled, .failed: callback(nil)
case .succeeded:
guard let image = cgimage else {
callback(nil)
return
}
let displayImage = UIImage(cgImage: image)
callback(displayImage)
}
}
}