I'm trying to show in bubble of video message (JSQVideoMediaItem
) an image preview of the video sent by the user but my code only show a black preview.
I'm sure the function generateThumbnail()
can work perfectly when I use it in order to take the file of the video sent from Firebase.
I use Firebase Storage, when a user send a video I store it in Firebase, so the preview choose the right video file from Firebase Storage, I tested it with print(previewImage)
.
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = super.collectionView(collectionView, cellForItemAt: indexPath) as! JSQMessagesCollectionViewCell
let message = messages[indexPath.item]
if !message.isMediaMessage {
if message.senderId == senderId {
cell.textView.textColor = UIColor.white
} else {
cell.textView.textColor = UIColor.black
}
} else if message.isMediaMessage {
if let media = message.media as? JSQVideoMediaItem {
var imagePreview = generateThumbnail(url: (media.fileURL)!)
let imageView = UIImageView(image: imagePreview)
imageView.backgroundColor = UIColor.clear
imageView.frame = CGRect(x: 0.0, y: 0.0, width: view.frame.size.width, height: view.frame.size.height)
imageView.contentMode = .center
imageView.clipsToBounds = true
JSQMessagesMediaViewBubbleImageMasker.applyBubbleImageMask(toMediaView: imageView, isOutgoing: false)
}
}
return cell
}
func generateThumbnail(url: URL) -> UIImage? {
do {
let asset = AVURLAsset(url: url)
let imageGenerator = AVAssetImageGenerator(asset: asset)
imageGenerator.appliesPreferredTrackTransform = true
let time: CMTime = CMTimeMake(1, 1)
let cgImage = try imageGenerator.copyCGImage(at: time, actualTime: nil)
return UIImage(cgImage: cgImage)
} catch {
print(error.localizedDescription)
return nil
}
}
I hope someone can help me