swift - 獲取網絡視頻截圖

注意:添加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秒鐘,
但是影隔播放速率則不同, 相差了有兩倍.
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,287評論 25 708
  • AFHTTPRequestOperationManager 網絡傳輸協議UDP、TCP、Http、Socket、X...
    Carden閱讀 4,384評論 0 12
  • 從哪說起呢? 單純講多線程編程真的不知道從哪下嘴。。 不如我直接引用一個最簡單的問題,以這個作為切入點好了 在ma...
    Mr_Baymax閱讀 2,831評論 1 17
  • 1. Psql 安裝 (CentOS-7.x) 采用yum安裝psql是最簡潔高效的 安裝完成之后,我們可能需要配...
    感覺被掏空閱讀 13,761評論 0 9
  • 你在看大象洗澡么? 是的,我在等你。心里默默的說 太久的時間和等待 會讓激情逐漸冷卻,蒼白 不是對你沒了感情 只是...
    那個在看大象洗澡的人閱讀 286評論 0 0