我就是这样访问视频的:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
if let videoURL = info[UIImagePickerControllerMediaURL] as? NSURL {
let video = NSData(contentsOfURL: videoURL)
}
}我想向控制器中的用户展示这个video (我不是指UIDocumentInteractionController预览这个)。我需要那个视频的缩略图,然后把这个分配给UIImageView。有可能吗?
发布于 2015-11-27 09:44:01
最简单的答案是:
import AVFoundation
private func thumbnailForVideoAtURL(url: NSURL) -> UIImage? {
let asset = AVAsset(URL: url)
let assetImageGenerator = AVAssetImageGenerator(asset: asset)
var time = asset.duration
time.value = min(time.value, 2)
do {
let imageRef = try assetImageGenerator.copyCGImageAtTime(time, actualTime: nil)
return UIImage(CGImage: imageRef)
} catch {
print("error")
return nil
}
}发布于 2017-08-20 15:59:30
这里是使用扩展的SWIFT3.0
import Foundation
import UIKit
import MediaPlayer
import SystemConfiguration
extension AVAsset{
var videoThumbnail:UIImage?{
let assetImageGenerator = AVAssetImageGenerator(asset: self)
assetImageGenerator.appliesPreferredTrackTransform = true
var time = self.duration
time.value = min(time.value, 2)
do {
let imageRef = try assetImageGenerator.copyCGImage(at: time, actualTime: nil)
let thumbNail = UIImage.init(cgImage: imageRef)
print("Video Thumbnail genertated successfuly".DubugSuccess())
return thumbNail
} catch {
print("error getting thumbnail video".DubugError(),error.localizedDescription)
return nil
}
}
}然后简单地从任何地方访问AVAsset/URL
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
if let videoURL = info[UIImagePickerControllerMediaURL] as? NSURL {
let video = NSData(contentsOfURL: videoURL)
//Create AVAsset from url
let ass = AVAsset(url:videoURL)
if let videoThumbnail = ass.videoThumbnail{
print("Success")
}
}
}发布于 2015-11-27 09:19:31
您可以使用此方法生成缩略图:
import AVFoundation
func generateThumnail(url : NSURL) -> UIImage?{
let asset: AVAsset = AVAsset(URL: url)
let assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
assetImgGenerate.appliesPreferredTrackTransform = true
let time : CMTime = CMTimeMake(1, 30)
let img : CGImageRef
do {
try img = assetImgGenerate.copyCGImageAtTime(time, actualTime: nil)
let frameImg: UIImage = UIImage(CGImage: img)
return frameImg
} catch {
}
return nil
}https://stackoverflow.com/questions/33953841
复制相似问题