我正在尝试为使用 imagePicker 选择的视频生成缩略图,但我收到此错误
"[discovery] errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled"
UserInfo={NSLocalizedDescription=查询已取消} ",谁能帮我弄清楚为什么?
下面是我的代码的一些片段。
let imagePickerController = UIImagePickerController()
var videoURL: NSURL?
@IBOutlet weak var videoImageTemp: UIImageView!
此函数用于启动实例化 imagePickerController 的过程
@IBAction func addVideo(_ sender: Any) {
imagePickerController.sourceType = .photoLibrary
imagePickerController.delegate = self
imagePickerController.mediaTypes = ["public.movie"]
present(imagePickerController, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let asset = AVAsset(url: info["UIImagePickerControllerReferenceURL"] as! URL)
let assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
assetImgGenerate.appliesPreferredTrackTransform = true
let time = CMTimeMake(1, 2)
let img = try? assetImgGenerate.copyCGImage(at: time, actualTime: nil)
if img != nil {
let frameImg = UIImage(cgImage: img!)
self.videoImageTemp.image = frameImg
self.videoImageTemp.contentMode = .scaleAspectFit
// assign your image to UIImageView
}
imagePickerController.dismiss(animated: true, completion: nil)
}
最佳答案
您的视频网址是一个临时文件网址。一旦 didFinishPickingMediaWithInfo 方法完成,该文件将被删除。顺便说一句,与您的问题无关,但自 Swift 3 以来,您应该使用 URL 而不是 NSURL。并且您需要在 didFinishPickingMediaWithInfo 方法
的主线程中执行此操作,更改 previewImageFromVideo 方法声明并使其返回同步生成图像并使其抛出 func previewImageFromVideo(url: URL) throws -> CGImage
。您的代码应如下所示:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if #available(iOS 11.0, *) {
if let url = info[UIImagePickerControllerMediaURL] as? URL {
imageView.image = getVideoThumbFrom(url: url)
}
} else {
if let url = info[UIImagePickerControllerReferenceURL] as? URL {
imageView.image = getVideoThumbFrom(url: url)
}
}
dismiss(animated: true) {
print("picker dismissed")
}
}
func getVideoThumbFrom(url: URL) -> UIImage? {
do {
return try UIImage(cgImage: previewImageFromVideo(url: url))
} catch {
print(error)
return nil
}
}
func previewImageFromVideo(url: URL) throws -> CGImage {
let imageGenerator = AVAssetImageGenerator(asset: AVAsset(url: url))
imageGenerator.appliesPreferredTrackTransform = true
return try imageGenerator.copyCGImage(at: CMTimeMake(1, 2), actualTime: nil)
}
关于ios - 无法为视频 iOS swift 生成缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48388429/