注意:添加AVFountion.Framework
網(wǎng)絡(luò)請(qǐng)求比較耗時(shí)财边,所以要寫(xiě)在異步線程里崇猫。
import Foundation
import AVFoundation
extension UIImageView{
//獲取網(wǎng)絡(luò)視頻截圖
func getNetWorkVidoeImage(url:String){
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), {
//需要長(zhǎng)時(shí)間處理的代碼
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(), {
//需要主線程執(zhí)行的代碼
self.image = UIImage(CGImage: image)
})
})
}
}
CMTimeMake和CMTimeMakeWithSeconds 詳解
CMTimeMake(a,b) a當(dāng)前第幾幀, b每秒鐘多少幀.當(dāng)前播放時(shí)間a/b
CMTimeMakeWithSeconds(a,b) a當(dāng)前時(shí)間,b每秒鐘多少幀
CMTimeMake CMTime CMTimeMake ( int64_t value, int32_t timescale);
time指的就是時(shí)間(不是秒)
而時(shí)間要換算成秒就要看第二個(gè)參數(shù)timeScale了.
timeScale指的是1秒需要由幾個(gè)frame構(gòu)成(可以視為fps),
因此真正要表達(dá)的時(shí)間就會(huì)是 time / timeScale 才會(huì)是秒.
簡(jiǎn)單舉個(gè)??
CMTimeMake(60, 30);
CMTimeMake(30, 15);
在這兩個(gè)例子中所表示在影片中的時(shí)間都皆為2秒鐘,
但是影隔播放速率則不同, 相差了有兩倍.