注意:添加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秒鐘,
但是影隔播放速率則不同, 相差了有兩倍.