美文网首页iOS 收集
swift - 获取网络视频截图

swift - 获取网络视频截图

作者: 方克己 | 来源:发表于2015-11-24 14:35 被阅读550次

注意:添加AVFountion.Framework

网络请求比较耗时,所以要写在异步线程里。

import Foundation

import AVFoundation

extension UIImageView{

//获取网络视频截图

func getNetWorkVidoeImage(url:String){

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), {

//需要长时间处理的代码

letasset =AVURLAsset(URL:NSURL(string: url)!)

letgenerator =AVAssetImageGenerator(asset: asset)

generator.appliesPreferredTrackTransform=true

lettime =CMTimeMakeWithSeconds(0.0,600)

varactualTime:CMTime=CMTimeMake(0,0)

varimage:CGImageRef!

do{
image =try generator.copyCGImageAtTime(time, actualTime: &actualTime)
}catch let error as NSError{
print(error)
}
dispatch_async(dispatch_get_main_queue(), {

          //需要主线程执行的代码
            self.image = UIImage(CGImage: image)

          })
      })
    }
}

CMTimeMake和CMTimeMakeWithSeconds 详解

CMTimeMake(a,b)               a当前第几帧, b每秒钟多少帧.当前播放时间a/b
CMTimeMakeWithSeconds(a,b)    a当前时间,b每秒钟多少帧
CMTimeMake CMTime CMTimeMake ( int64_t value, int32_t timescale);
time指的就是时间(不是秒) 
而时间要换算成秒就要看第二個参数timeScale了.
timeScale指的是1秒需要由几个frame构成(可以视为fps),
因此真正要表达的时间就会是 time / timeScale 才會是秒.

简单举个🌰
CMTimeMake(60, 30);
CMTimeMake(30, 15);
在这两个例子中所表示在影片中的时间都皆为2秒钟,
但是影隔播放速率则不同, 相差了有两倍.

相关文章

网友评论

本文标题:swift - 获取网络视频截图

本文链接:https://www.haomeiwen.com/subject/fovrhttx.html