首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Swift中获取从UIPickerViewController中获取的视频缩略图?

如何在Swift中获取从UIPickerViewController中获取的视频缩略图?
EN

Stack Overflow用户
提问于 2015-11-27 09:10:59
回答 4查看 14K关注 0票数 4

我就是这样访问视频的:

代码语言:javascript
复制
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {

    if let videoURL = info[UIImagePickerControllerMediaURL] as? NSURL {
        let video = NSData(contentsOfURL: videoURL)
    }
}

我想向控制器中的用户展示这个video (我不是指UIDocumentInteractionController预览这个)。我需要那个视频的缩略图,然后把这个分配给UIImageView。有可能吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-11-27 09:44:01

最简单的答案是:

代码语言:javascript
复制
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
    }
}
票数 15
EN

Stack Overflow用户

发布于 2017-08-20 15:59:30

这里是使用扩展的SWIFT3.0

代码语言:javascript
复制
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

代码语言:javascript
复制
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")
        }
    }
}
票数 7
EN

Stack Overflow用户

发布于 2015-11-27 09:19:31

您可以使用此方法生成缩略图:

代码语言:javascript
复制
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
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33953841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档