从Swift 3.0中的Server Video Url获取Thumbail/Preview图像

Cha*_*rmi 1 ios swift swift3

我想从服务器上的视频底层获取缩略图图像.视频文件不在本地.它在我的Sever上.视频文件的扩展名为.m3u8.

jav*_*muu 11

你能行的.

第一步你需要导入AVFoundation:

    import AVFoundation
Run Code Online (Sandbox Code Playgroud)

然后将下面的代码放到您的控制器:

func getThumbnailImage(forUrl url: URL) -> UIImage? {
    let asset: AVAsset = AVAsset(url: url)
    let imageGenerator = AVAssetImageGenerator(asset: asset)

    do {
        let thumbnailImage = try imageGenerator.copyCGImage(at: CMTimeMake(1, 60) , actualTime: nil)
        return UIImage(cgImage: thumbnailImage)
    } catch let error {
        print(error)
    }

    return nil
}
Run Code Online (Sandbox Code Playgroud)

用法:

    let imageView = UIImageView()
    let url = URL(string: "your_video_url")

    if let thumbnailImage = getThumbnailImage(forUrl: url) {
        imageView.image = thumbnailImage
    }
Run Code Online (Sandbox Code Playgroud)

网址更改为您的视频链接.

希望它有所帮助!

  • 它对我不起作用..这是我收到的错误 Error Domain=AVFoundationErrorDomain Code=-11800“操作无法完成” UserInfo={NSUnderlyingError=0x608000240870 {Error Domain=NSOSStatusErrorDomain Code=-12782“(空) "}, NSLocalizedFailureReason=发生未知错误(-12782),NSLocalizedDescription=操作无法完成} (3认同)

Sai*_*ddy 7

第1步

import AVFoundation
Run Code Online (Sandbox Code Playgroud)

第2步

在您的 ViewController 中添加以下功能

func getThumbnailImageFromVideoUrl(url: URL, completion: @escaping ((_ image: UIImage?)->Void)) {
    DispatchQueue.global().async { //1
        let asset = AVAsset(url: url) //2
        let avAssetImageGenerator = AVAssetImageGenerator(asset: asset) //3
        avAssetImageGenerator.appliesPreferredTrackTransform = true //4
        let thumnailTime = CMTimeMake(value: 2, timescale: 1) //5
        do {
            let cgThumbImage = try avAssetImageGenerator.copyCGImage(at: thumnailTime, actualTime: nil) //6
            let thumbNailImage = UIImage(cgImage: cgThumbImage) //7
            DispatchQueue.main.async { //8
                completion(thumbNailImage) //9
            }
        } catch {
            print(error.localizedDescription) //10
            DispatchQueue.main.async {
                completion(nil) //11
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

第 3 步

self.getThumbnailImageFromVideoUrl(url: videoUrl) { (thumbNailImage) in
    self.yourImageView.image = thumbNailImage
}
Run Code Online (Sandbox Code Playgroud)

如果您需要完整的解释,请参阅以下链接 https://www.swiftdevcenter.com/get-thumbnail-from-video-url-in-background-swift/