Swift4.2抓取视频截图

时间:2018-10-02 15:05:14

标签: swift avasset

在Swift 4.2中,我试图从视频中抓取屏幕截图

func thumbnailImageFor(fileUrl:URL) -> UIImage? {

        let asset = AVAsset(url: fileUrl)
        let assetImgGenerate = AVAssetImageGenerator(asset: asset)
        assetImgGenerate.appliesPreferredTrackTransform = true

        let time = CMTimeMakeWithSeconds(1.0, preferredTimescale: 600)
        do {
            let img = try assetImgGenerate.copyCGImage(at: time, actualTime: nil)
            let thumbnail = UIImage(cgImage: img)
            return thumbnail
        } catch {
            print(error)
            return nil
        }   
 }

但出现错误:

  

Error Domain = AVFoundationErrorDomain代码= -11800“该操作可能   未完成” UserInfo = {NSLocalizedFailureReason =未知错误   发生(-12792),NSLocalizedDescription =无法执行该操作   已完成,NSUnderlyingError = 0x600000f46580 {Error   Domain = NSOSStatusErrorDomain Code = -12792“(null)”}}

视频的网址: https://firebasestorage.googleapis.com/v0/b/lailaichatapp.appspot.com/o/message_movies%2F8A61AC4E-4A08-4EC7-BC78-A5D861BE48C5.mov?alt=media&token=8906971d-59d7-4880-988e-135615c10f22

我想念东西吗?

1 个答案:

答案 0 :(得分:1)

我认为这可能与电影的文件类型有关,因为这可行:

import UIKit
import AVFoundation

func thumbnailImageFor(fileUrl:URL) -> UIImage? {

    let video = AVURLAsset(url: fileUrl, options: [:])
    let assetImgGenerate = AVAssetImageGenerator(asset: video)
    assetImgGenerate.appliesPreferredTrackTransform = true

    let videoDuration:CMTime = video.duration
    let durationInSeconds:Float64 = CMTimeGetSeconds(videoDuration)

    let numerator = Int64(1)
    let denominator = videoDuration.timescale
    let time = CMTimeMake(value: numerator, timescale: denominator)

    do {
        let img = try assetImgGenerate.copyCGImage(at: time, actualTime: nil)
        let thumbnail = UIImage(cgImage: img)
        return thumbnail
    } catch {
        print(error)
        return nil
    }
}

let url: URL = URL(string: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4")!

let image: UIImage? = thumbnailImageFor(fileUrl: url)
print("Image: \(image)")