每次从Swift iOS中的网址获取相同的视频缩略图图像 [英] Getting same Video Thumbnail Image every time from the Url in Swift iOS

查看:280
本文介绍了每次从Swift iOS中的网址获取相同的视频缩略图图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在Swift3中开发基于视频的应用程序.根据视频时长,我有一个视频网址和一个范围滑块",用户可以从滑块中选择任何最小值和最大值.如果假设用户选择了最小值3 Sec和最大值7 Sec,那么在此期间,我需要生成视频缩略图图像.为此,我正在使用AVAssetImageGenerator生成此代码,我在下面的两个代码中都尝试过实现该代码:

I am developing a video based Application in Swift3. Where I have one video url and a Range Slider according to the video duration and user can select any minimum and maximum value from slider. If suppose user has selected min value 3 Sec and Max Value 7 Sec, So for this duration I need to generate a Video Thumbnail Image. For this I am using AVAssetImageGenerator to generate this, I tried below both code to achieve this :

func createThumbnailOfVideoFromFileURL(_ strVideoURL: URL) -> UIImage?{

        let asset = AVAsset(url: strVideoURL)
        let assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
        assetImgGenerate.appliesPreferredTrackTransform = true
        let time = CMTimeMake(1, 30)
        let img = try? assetImgGenerate.copyCGImage(at: time, actualTime: nil)

        guard let cgImage = img else { return nil }

        let frameImg    = UIImage(cgImage: cgImage)
        return frameImg
    }


func generateThumbnailForUrl(vidUrl:URL) -> UIImage {

        let asset = AVURLAsset(url: vidUrl, options: nil)
        let imgGenerator = AVAssetImageGenerator(asset: asset)
        var thmbnlImg = UIImage()
        do{
            let cgImage = try imgGenerator.copyCGImage(at: CMTimeMake(0, 1), actualTime: nil)
            thmbnlImg = UIImage(cgImage: cgImage)
            thmbnlImg = thmbnlImg.imageRotatedByDegrees(degrees: 90.0, flip: false)
        }
        catch{
            print(error)
        }
        // !! check the error before proceeding
        return thmbnlImg
    }

但是问题是我使用上述两种方法都得到了相同的缩略图,bcos我在两种方法中都没有设置持续时间.如何添加最小和最大持续时间,以针对每个不同的持续时间生成不同的缩略图.请帮助我解决我的问题.谢谢!

But the problem is I am getting same thumbnail image using both above methods, bcos I am not setting duration here in both methods. How can I add minimum and maximum duration to generate different thumbnail image for each different duration. Please help me resolve my problem. Thank you!

我试图将持续时间设置为:

I tried to set duration like :

let time: CMTime = CMTimeMakeWithSeconds(rangeSlider!.lowerValue, 1)

然后,我得到了不同的缩略图,但是对于某些滑块范围,我也得到了零缩略图.任何人都可以知道如何在CMTimeMakeWithSeconds中设置preferredTimeScale值吗?

Then I am getting different thumbnail image but for some slider ranges I am getting nil thumbnail image also. Can anyone have some idea how to set preferredTimeScale value in CMTimeMakeWithSeconds ?

推荐答案

尝试此代码

static func generateThumbnail(videoUrl: String) -> UIImage? {

    do {
        let url                                         = URL(string: videoUrl)
        let asset                                       = AVURLAsset(url: url!)
        let imageGenerator                              = AVAssetImageGenerator(asset: asset)
        imageGenerator.appliesPreferredTrackTransform   = true
        let cgImage                                     = try imageGenerator.copyCGImage(at: CMTime(seconds: 2.0, preferredTimescale: 60),
                                                                                         actualTime: nil)

        return UIImage(cgImage: cgImage)

    } catch {

        print(error.localizedDescription)
        return nil
    }
}

这篇关于每次从Swift iOS中的网址获取相同的视频缩略图图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆