我正在Swift3中开发基于视频的应用程序。根据视频持续时间,我有一个视频网址和一个范围滑块,用户可以从滑块中选择任何最小值和最大值。如果假设用户选择了最小值3秒和最大值7秒,那么在这段时间内,我需要生成一个视频缩略图。对于这个我使用AVAssetImageGenerator
生成这个,我都尝试下面的代码来实现这一目标:每次从Swift的Url获取相同的视频缩略图iOS
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我这两种方法都没有设定持续时间。我如何添加最小和最大持续时间来为每个不同的持续时间生成不同的缩略图。请帮我解决我的问题。谢谢!
编辑:我试图设置像时间:
let time: CMTime = CMTimeMakeWithSeconds(rangeSlider!.lowerValue, 1)
然后我得到不同的缩略图,但对于一些滑块范围我得到零缩略图也。任何人都可以有一些想法如何设置CMTimeMakeWithSeconds
preferredTimeScale值?
感谢您的回复,在这里我没有修剪视频Url ..我只有一个主视频网址和一个范围滑块,用户将从滑块中选择最小值和最大值。使用该范围值我需要生成缩略图图像。任何建议......你明白吗? –
好的...您需要将滑块的最小值和最大值转换为CMTimeMakeWithSeconds,并将这些值传递给上述函数。 fromTime:Float64是这里的参数。 –
你可以在代码中显示我吗,我更改了CMTimeMake值,但每次都是相同的缩略图。 –