Я на Swift 4 и пытаюсь отобразить на UITableView изображения и видео из моей базы данных / хранилища Firebase.
Я использовал этот тип функции, но он не работает
функция преобразования видео в uiImage:
func getThumbnailFrom(path: URL) -> UIImage? {
do {
let asset = AVURLAsset(url: path , options: nil)
let imgGenerator = AVAssetImageGenerator(asset: asset)
imgGenerator.appliesPreferredTrackTransform = true
let cgImage = try imgGenerator.copyCGImage(at: CMTimeMake(0, 1), actualTime: nil)
let thumbnail = UIImage(cgImage: cgImage)
return thumbnail
} catch let error {
print("*** Error generating thumbnail: \(error.localizedDescription)")
return nil
}
}
В моем cellforRowat я поместил эти строки:
CatsListLine = self.CatsListlist[indexPath.row]
print ("CatsListLine.CatsList_MovieOrImage = \(CatsListLine.CatsList_MovieOrImage)")
// CatsListLine.CatsList_MovieOrImage = https://firebasestorage.googleapis.com/v0/b/catshistory-***a.appspot.com/o/Videos*****.mp4?alt=media&token=****-***-4**6-ac**1-6****05
if CatsListLine.CatsList_MovieOrImage == "Image" {
Services().getImage(CatsListLine.CatsList_Photo!) { (image) in
if image != nil {
cell.CatsList_ImageCatsList.image = image }
}
} else {
//Movie thumbnail
do {
print ("CatsList_Photo = \(CatsListLine.CatsList_Photo!)")
let url = URL(string:CatsListLine.CatsList_Photo!)!
let imageURL = getThumbnailFrom(path: url)
if imageURL != nil {
DispatchQueue.global(qos: .background).async {
cell.CatsList_ImageCatsList.image = imageURL
}
} else {
print (« the image URL is nil)
}
Результат -> "URL изображения ноль"
Мои вопросы:
1) Я хотел бы просто извлечь один кадр из моего URL (https://firebasestorage.googleapis.com/v0/b/catshistory-*a.appspot.com/o/Videos*****.mp4?alt=media&token=****-*-46-ac1-6****05),, но каждая попытка сделать это была безуспешной (даже при
этот функционал я пробовал)
func imageFromVideo(url: URL, at time: TimeInterval) -> UIImage? {
let asset = AVURLAsset(url: url)
let assetIG = AVAssetImageGenerator(asset: asset)
assetIG.appliesPreferredTrackTransform = true
assetIG.apertureMode = AVAssetImageGeneratorApertureModeEncodedPixels
let cmTime = CMTime(seconds: time, preferredTimescale: 60)
let thumbnailImageRef: CGImage
do {
thumbnailImageRef = try assetIG.copyCGImage(at: cmTime, actualTime: nil)
} catch let error {
print("Error: \(error)")
return nil
}
return UIImage(cgImage: thumbnailImageRef)
}
2) Если это возможно, я хотел бы, чтобы в моем UITableview был небольшой предварительный просмотр моего видео (например, 5-секундное зацикливание видео). Это возможно, не занимая слишком много памяти?
Спасибо за вашу помощь!