AVFoundation編程指南13-AVAssetImageGenerator

寫在前面

喜歡AVFoundation資料的同學(xué)可以關(guān)注我的專題:《AVFoundation》專輯
也可以關(guān)注我的簡書賬號

正文

AVAssetImageGenerator提供asset的縮略圖或預(yù)覽圖像,該功能與Playback無關(guān)笤昨。

數(shù)據(jù)結(jié)構(gòu)

AVAssetImageGenerator數(shù)據(jù)結(jié)構(gòu)如下:

AVAssetImageGenerator

AVAssetImageGeneratorApertureMode

光圈模式的類型桑包。
主要包括如下選項:

AVF_EXPORT AVAssetImageGeneratorApertureMode const AVAssetImageGeneratorApertureModeCleanAperture NS_AVAILABLE(10_7, 4_0);
屬性名 AVAssetImageGeneratorApertureModeCleanAperture
解釋 將應(yīng)用像素長寬比和透明光圈杰妓。
備注 圖像的clean aperture是視頻區(qū)域街氢,由于沒有由信號編碼引起的過渡artifacts摆昧。
AVF_EXPORT AVAssetImageGeneratorApertureMode const AVAssetImageGeneratorApertureModeProductionAperture NS_AVAILABLE(10_7, 4_0);
屬性名 AVAssetImageGeneratorApertureModeProductionAperture
解釋 僅應(yīng)用像素長寬比诚卸。
備注 圖像不會裁剪到透明的光圈區(qū)域界酒,但會根據(jù)像素長寬比進行縮放纠屋。如果要查看視頻中的所有像素(包括邊緣),請使用此選項盾计。
AVF_EXPORT AVAssetImageGeneratorApertureMode const AVAssetImageGeneratorApertureModeEncodedPixels NS_AVAILABLE(10_7, 4_0);
屬性名 AVAssetImageGeneratorApertureModeEncodedPixels
解釋 不會應(yīng)用像素長寬比和透明光圈售担。
備注 圖像不會被裁剪到透明的光圈區(qū)域,并且不會根據(jù)像素長寬比進行縮放署辉。顯示圖像描述的編碼尺寸族铆。

AVAssetImageGeneratorResult

結(jié)果有如下三種選項:

  • AVAssetImageGeneratorSucceeded(成功)
  • AVAssetImageGeneratorFailed(失敗)
  • AVAssetImageGeneratorCancelled(取消)

AVAssetImageGenerator

@property (nonatomic, readonly) AVAsset *asset NS_AVAILABLE(10_9, 6_0);

指示初始化 AVAssetImageGeneratorAVAsset實例哭尝。

@property (nonatomic) BOOL appliesPreferredTrackTransform;

指定在從asset中提取圖像時是否應(yīng)用trackpreferredTransformAVAssetTrack preferredTransform中會有詳細說明)哥攘。
默認為NO。僅支持旋轉(zhuǎn)90度材鹦,180度或270度逝淹。

@property (nonatomic) CGSize maximumSize;

指定生成的圖像的最大尺寸。默認(CGSizeZero)是asset的未縮放尺寸桶唐。

AVAssetImageGenerator將縮放圖像栅葡,使其適合定義的邊界框。
圖像永遠不會放大尤泽⌒来兀縮放圖像的寬高比將由apertureMode屬性定義。

@property (nonatomic, readonly, nullable) id <AVVideoCompositing> customVideoCompositor NS_AVAILABLE(10_9, 7_0);

表示使用的自定義視頻合成器實例(如果有的話)

@property (nonatomic) CMTime requestedTimeToleranceBefore NS_AVAILABLE(10_7, 5_0);
@property (nonatomic) CMTime requestedTimeToleranceAfter NS_AVAILABLE(10_7, 5_0);

生成的圖像的實際時間將在[requestedTime-toleranceBefore坯约,requestedTime + toleranceAfter]范圍內(nèi)熊咽,并且可能與請求的效率時間不同。

通過kCMTimeZero for toleranceBeforetoleranceAfter請求幀精確圖像生成;這可能會導(dǎo)致額外的解碼延遲闹丐。

默認值是kCMTimePositiveInfinity横殴。

+ (instancetype)assetImageGeneratorWithAsset:(AVAsset *)asset;
函數(shù)名 assetImageGeneratorWithAsset:
解釋 返回AVAssetImageGenerator的實例以與指定的asset一起使用。
參數(shù) asset:

將從中提取圖像的asset卿拴。
返回值 返回AVAssetImageGenerator的一個實例
備注 即使asset在初始化時沒有視覺tracks衫仑,該方法也可能成功梨与。

客戶端可能希望測試資產(chǎn)是否具有具有視覺特征的軌道- [AVAsset tracksWithMediaCharacteristic:]

注意惑畴,屬于AVAsset蛋欣,AVMutableCompositionAVMutableMovie的可變子類的asset可能會在初始化關(guān)聯(lián)的AVAssetImageGenerator后獲得可視軌跡航徙。

但是如贷,如果在生成圖像時發(fā)生asset突變,則圖像生成的結(jié)果是不確定的到踏。

AVAssetImageGenerator將使用默認啟用的視頻軌道來生成圖像杠袱。
- (instancetype)initWithAsset:(AVAsset *)asset NS_DESIGNATED_INITIALIZER;
函數(shù)名 initWithAsset:
解釋 初始化AVAssetImageGenerator的實例以與指定的asset一起使用。
參數(shù) asset:

將從中提取圖像的asset窝稿。
返回值 返回一個AVAssetImageGenerator的實例
備注 即使asset在初始化時沒有視覺軌跡楣富,該方法也可能成功。

客戶端可能希望通過以下方式測試asset是否具有具有視覺特征的軌跡- [AVAsset tracksWithMediaCharacteristic:]伴榔。

注意纹蝴,屬于AVAssetAVMutableCompositionAVMutableMovie的可變子類的asset可能會在初始化關(guān)聯(lián)的AVAssetImageGenerator后獲得可視軌跡踪少。

但是塘安,如果在生成圖像時發(fā)生asset突變,則圖像生成的結(jié)果是不確定的援奢。

AVAssetImageGenerator將使用默認啟用的視頻軌道來生成圖像兼犯。
- (nullable CGImageRef)copyCGImageAtTime:(CMTime)requestedTime actualTime:(nullable CMTime *)actualTime error:(NSError * _Nullable * _Nullable)outError CF_RETURNS_RETAINED;
函數(shù)名 copyCGImageAtTime:actualTime:error:
解釋 返回指定時間或附近的assetCFRetained CGImageRef
參數(shù) requestedTime:
創(chuàng)建asset圖像的時間集漾。

actualTime:
指向CMTime的指針切黔,用于接收實際生成圖像的時間。
在此信息中具篇,傳遞NULL纬霞。

outError:
如果此方法返回NULL,則描述失敗原因的錯誤對象驱显。
返回值 返回CGImageRef類型的對象
備注 同步返回CGImage险领。所有權(quán)遵循創(chuàng)建規(guī)則。
typedef void (^AVAssetImageGeneratorCompletionHandler)(CMTime requestedTime, CGImageRef _Nullable image, CMTime actualTime, AVAssetImageGeneratorResult result, NSError * _Nullable error);

如果結(jié)果是AVAssetImageGeneratorFailed秒紧,則錯誤對象指示失敗的原因绢陌。

- (void)generateCGImagesAsynchronouslyForTimes:(NSArray<NSValue *> *)requestedTimes completionHandler:(AVAssetImageGeneratorCompletionHandler)handler;
函數(shù)名 generateCGImagesAsynchronouslyForTimes:completionHandler:
解釋 返回指定時間或附近的資產(chǎn)的一系列CGImageRefs
參數(shù) requestedTimes:
NSValuesNSArray熔恢,每個都包含CMTime脐湾,指定請求圖像的asset時間。

handler:
圖像請求完成時將調(diào)用的block叙淌。
備注 采用有效的“批處理模式”秤掌,按時間順序獲取圖像愁铺。

客戶端將在requestedTimes中為每個請求的時間收到一個處理程序回調(diào)。

對生成器屬性的更改(快照行為闻鉴,最大大小等...)不會影響未完成的異步映像生成請求茵乱。

生成的圖像不會保留。如果客戶希望在完成處理程序返回后保留圖像孟岛,則客戶端應(yīng)保留該圖像瓶竭。
- (void)cancelAllCGImageGeneration;
函數(shù)名 cancelAllCGImageGeneration
解釋 取消所有未完成的圖像生成請求。
備注 在以前每次調(diào)用-generateCGImagesAsynchronouslyForTimes:completionHandler:為尚未提供圖像的每個圖像時間調(diào)用帶有AVAssetImageGeneratorCancelled的處理程序block渠羞。
上一章 目錄 下一章
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末斤贰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子次询,更是在濱河造成了極大的恐慌荧恍,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屯吊,死亡現(xiàn)場離奇詭異送巡,居然都是意外死亡,警方通過查閱死者的電腦和手機盒卸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門骗爆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人世落,你說我怎么就攤上這事淮腾。” “怎么了屉佳?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵谷朝,是天一觀的道長。 經(jīng)常有香客問我武花,道長圆凰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任体箕,我火速辦了婚禮专钉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘累铅。我一直安慰自己跃须,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布娃兽。 她就那樣靜靜地躺著菇民,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上第练,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天阔馋,我揣著相機與錄音,去河邊找鬼娇掏。 笑死呕寝,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的婴梧。 我是一名探鬼主播下梢,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼志秃!你這毒婦竟也來了怔球?” 一聲冷哼從身側(cè)響起嚼酝,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤浮还,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后闽巩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霹琼,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡俭识,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卒暂。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖寄症,靈堂內(nèi)的尸體忽然破棺而出绣硝,到底是詐尸還是另有隱情,我是刑警寧澤叔营,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布屋彪,位于F島的核電站,受9級特大地震影響绒尊,放射性物質(zhì)發(fā)生泄漏畜挥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一婴谱、第九天 我趴在偏房一處隱蔽的房頂上張望蟹但。 院中可真熱鬧,春花似錦谭羔、人聲如沸华糖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽客叉。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間十办,已是汗流浹背秀撇。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留向族,地道東北人呵燕。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像件相,于是被迫代替她去往敵國和親再扭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348