寫(xiě)在前面
喜歡AVFoundation資料的同學(xué)可以關(guān)注我的專題:《AVFoundation》專輯
也可以關(guān)注我的簡(jiǎn)書(shū)賬號(hào)
正文
AVAssetExportSession
可以以指定導(dǎo)出預(yù)設(shè)所描述的形式從現(xiàn)有AVAsset
的內(nèi)容創(chuàng)建新的定時(shí)媒體資源逗鸣。
數(shù)據(jù)結(jié)構(gòu)
AVAssetExportSession
數(shù)據(jù)結(jié)構(gòu)如下:
Export Preset Names
下面這些export
選項(xiàng)可用于生成視頻大小適合設(shè)備的視頻文件洋侨。
export
不會(huì)從較小的尺寸縮放較大尺寸的視頻相速。視頻將使用H.264
壓縮和音頻將使用AAC
進(jìn)行壓縮香伴。
AVF_EXPORT NSString *const AVAssetExportPresetLowQuality NS_AVAILABLE(10_11, 4_0);
AVF_EXPORT NSString *const AVAssetExportPresetMediumQuality NS_AVAILABLE(10_11, 4_0);
AVF_EXPORT NSString *const AVAssetExportPresetHighestQuality NS_AVAILABLE(10_11, 4_0);
下面這個(gè)export
(導(dǎo)出)方式視頻方面使用HEVC
壓縮和音頻方面將使用AAC
進(jìn)行壓縮晒来。有些設(shè)備可能無(wú)法支持某些尺寸。
AVF_EXPORT NSString *const AVAssetExportPresetHEVCHighestQuality NS_AVAILABLE(10_13, 11_0);
下面的導(dǎo)出方式視頻采用HEVC
壓縮,音頻采用AAC
壓縮幕垦。有些設(shè)備可能無(wú)法支持某些尺寸。
AVF_EXPORT NSString *const AVAssetExportPreset640x480 NS_AVAILABLE(10_7, 4_0);
AVF_EXPORT NSString *const AVAssetExportPreset960x540 NS_AVAILABLE(10_7, 4_0);
AVF_EXPORT NSString *const AVAssetExportPreset1280x720 NS_AVAILABLE(10_7, 4_0);
AVF_EXPORT NSString *const AVAssetExportPreset1920x1080 NS_AVAILABLE(10_7, 5_0);
AVF_EXPORT NSString *const AVAssetExportPreset3840x2160 NS_AVAILABLE(10_10, 9_0);
下面的導(dǎo)出方式視頻采用HEVC
壓縮奕翔,音頻采用AAC
壓縮裕寨。有些設(shè)備可能無(wú)法支持某些尺寸。
AVF_EXPORT NSString *const AVAssetExportPresetHEVC1920x1080 NS_AVAILABLE(10_13, 11_0);
AVF_EXPORT NSString *const AVAssetExportPresetHEVC3840x2160 NS_AVAILABLE(10_13, 11_0);
下面的導(dǎo)出選項(xiàng)將生成僅具有音頻的.m4a
文件派继,其中包含適當(dāng)?shù)?code>iTunes無(wú)間隙播放數(shù)據(jù)
AVF_EXPORT NSString *const AVAssetExportPresetAppleM4A NS_AVAILABLE(10_7, 4_0);
下面的導(dǎo)出選項(xiàng)將使所有軌道的媒體完全按照存儲(chǔ)在源資源中的方式傳遞到output
宾袜,除了通道無(wú)法通過(guò)的軌道,通常是由于指定的outputFileType
指示的容器格式的約束驾窟。
此選項(xiàng)不包含在-allExportPresets
和-exportPresetsCompatibleWithAsset
返回的數(shù)組中庆猫。
AVF_EXPORT NSString *const AVAssetExportPresetPassthrough NS_AVAILABLE(10_7, 4_0);
如果當(dāng)前的操作系統(tǒng)是MAC OS
操作系統(tǒng)并且不是嵌入式操作系統(tǒng)也不是iOS
操作系統(tǒng)的話,下面的導(dǎo)出方式也可以使用
下面這些導(dǎo)出選項(xiàng)用于生成可在指定Apple
設(shè)備上播放的文件月培。
這些預(yù)設(shè)僅適用于桌面導(dǎo)出。
這些文件應(yīng)具有.m4v
擴(kuò)展名(或m4a
用于僅包含音頻源的導(dǎo)出)恩急。
AVF_EXPORT NSString *const AVAssetExportPresetAppleM4VCellular NS_AVAILABLE(10_7, NA);
AVF_EXPORT NSString *const AVAssetExportPresetAppleM4ViPod NS_AVAILABLE(10_7, NA);
AVF_EXPORT NSString *const AVAssetExportPresetAppleM4V480pSD NS_AVAILABLE(10_7, NA);
AVF_EXPORT NSString *const AVAssetExportPresetAppleM4VAppleTV NS_AVAILABLE(10_7, NA);
AVF_EXPORT NSString *const AVAssetExportPresetAppleM4VWiFi NS_AVAILABLE(10_7, NA);
AVF_EXPORT NSString *const AVAssetExportPresetAppleM4V720pHD NS_AVAILABLE(10_7, NA);
AVF_EXPORT NSString *const AVAssetExportPresetAppleM4V1080pHD NS_AVAILABLE(10_8, NA);
下面這個(gè)導(dǎo)出選項(xiàng)將生成帶有Apple ProRes 422
視頻和LPCM
音頻的QuickTime
視頻。
AVF_EXPORT NSString *const AVAssetExportPresetAppleProRes422LPCM NS_AVAILABLE(10_7, NA);
AVAssetExportSessionStatus
AVAssetExportSessionStatusUnknown,
AVAssetExportSessionStatusWaiting,
AVAssetExportSessionStatusExporting,
AVAssetExportSessionStatusCompleted,
AVAssetExportSessionStatusFailed,
AVAssetExportSessionStatusCancelled
AVAssetExportSession
+ (nullable instancetype)exportSessionWithAsset:(AVAsset *)asset presetName:(NSString *)presetName NS_AVAILABLE(10_7, 4_1);
函數(shù)名 | exportSessionWithAsset:presetName: |
---|---|
解釋 | 返回指定源資源和預(yù)設(shè)的AVAssetExportSession 實(shí)例衷恭。 |
參數(shù) |
asset :用于導(dǎo)出的 AVAsset 對(duì)象。presetName :NSString 随珠,指定導(dǎo)出的預(yù)設(shè)模板的名稱灭袁。 |
返回值 |
AVAssetExportSession 的一個(gè)實(shí)例。 |
備注 | 如果指定的asset 屬于AVAsset 茸歧,AVMutableComposition 或AVMutableMovie 的可變子類倦炒,則如果在操作開(kāi)始后改變asset 举娩,則任何與導(dǎo)出相關(guān)的操作的結(jié)果都是未定義的。這些操作包括但不限于:1 )測(cè)試導(dǎo)出預(yù)設(shè)與asset 的兼容性铜涉,2 )計(jì)算輸出文件的最大持續(xù)時(shí)間或估計(jì)長(zhǎng)度智玻,以及3 )導(dǎo)出操作本身。 |
- (nullable instancetype)initWithAsset:(AVAsset *)asset presetName:(NSString *)presetName NS_DESIGNATED_INITIALIZER;
函數(shù)名 | initWithAsset:presetName: |
---|---|
解釋 | 使用指定的預(yù)設(shè)初始化AVAssetExportSession 芙代,并將源設(shè)置為asset 的內(nèi)容吊奢。 |
參數(shù) |
asset :用于導(dǎo)出的 AVAsset 對(duì)象。presetName :NSString 纹烹,指定導(dǎo)出的預(yù)設(shè)模板的名稱页滚。 |
返回值 | 返回初始化的AVAssetExportSession 。 |
備注 | 如果指定的asset 屬于AVAsset 铺呵,AVMutableComposition 或AVMutableMovie 的可變子類裹驰,則如果在操作開(kāi)始后改變asset ,則任何與導(dǎo)出相關(guān)的操作的結(jié)果都是未定義的片挂。這些操作包括但不限于:1 )測(cè)試導(dǎo)出預(yù)設(shè)與asset 的兼容性幻林,2 )計(jì)算輸出文件的最大持續(xù)時(shí)間或估計(jì)長(zhǎng)度,以及3 )導(dǎo)出操作本身音念。 |
@property (nonatomic, readonly) NSString *presetName;
除非另有說(shuō)明沪饺,否則A??VAssetExortSession
屬性是可以進(jìn)行鍵值觀察的。
指示初始化AVExportSession
的預(yù)設(shè)名稱闷愤。
@property (nonatomic, retain, readonly) AVAsset *asset NS_AVAILABLE(10_8, 5_0);
指示初始化AVExportSession
的AVAsset
實(shí)例整葡。
@property (nonatomic, copy, nullable) AVFileType outputFileType;
指示會(huì)話要寫(xiě)入的文件類型。
在調(diào)用-exportAsynchronouslyWithCompletionHandler:;
之前讥脐,必須設(shè)置此屬性的值遭居。否則-exportAsynchronouslyWithCompletionHandler:
將引發(fā)NSInternalInconsistencyException
。
將此屬性的值設(shè)置為不在會(huì)話支持的文件類型中的文件類型將導(dǎo)致NSInvalidArgumentException
攘烛。詳情請(qǐng)參閱supportedFileTypes
魏滚。
@property (nonatomic, copy, nullable) NSURL *outputURL;
指示導(dǎo)出會(huì)話輸出的URL
。你可以使用UTTypeCopyPreferredTagWithClass(outputFileType坟漱,kUTTagClassFilenameExtension)
為你指定的outputFileType
獲取適當(dāng)?shù)穆窂綌U(kuò)展鼠次。有關(guān)UTTypeCopyPreferredTagWithClass
和kUTTagClassFilenameExtension
的更多信息,請(qǐng)參閱<MobileCoreServices / UTType.h>
,在Mac OS X
上可以查看<LaunchServices / UTType.h>
腥寇。
@property (nonatomic) BOOL shouldOptimizeForNetworkUse;
表示應(yīng)該優(yōu)化輸出文件以供網(wǎng)絡(luò)使用成翩,例如一個(gè)QuickTime
電影文件應(yīng)該支持"fast start"
。
@property (nonatomic, readonly) AVAssetExportSessionStatus status;
表示導(dǎo)出會(huì)話的狀態(tài)赦役。
@property (nonatomic, readonly, nullable) NSError *error;
描述導(dǎo)出狀態(tài)為AVAssetExportSession
狀態(tài)失敗時(shí)發(fā)生的錯(cuò)誤麻敌。
- (void)exportAsynchronouslyWithCompletionHandler:(void (^)(void))handler;
函數(shù)名 | exportAsynchronouslyWithCompletionHandler: |
---|---|
解釋 | 啟動(dòng)導(dǎo)出會(huì)話的異步執(zhí)行。 |
參數(shù) |
handler :如果導(dǎo)出的內(nèi)部準(zhǔn)備失敗掂摔,則將同步調(diào)用該處理程序术羔。在 -exportAsynchronouslyWithCompletionHandler:return 之后,也可以異步調(diào)用處理程序乙漓,在以下情況中: 1)如果在導(dǎo)出過(guò)程中發(fā)生故障级历,包括加載,重新編碼或?qū)⒚襟w數(shù)據(jù)寫(xiě)入輸出失敗叭披。 2)如果調(diào)用 -cancelExport 寥殖。3)如果導(dǎo)出會(huì)話成功,則將其輸出完全寫(xiě)入 outputURL 涩蜘。在每種情況下嚼贡, AVAssetExportSession.status 都將發(fā)出asset 讀取器的終端狀態(tài)信號(hào),如果發(fā)生故障同诫,則表示NSError 描述失敗可以從 error 屬性中獲取粤策。 |
備注 | 啟動(dòng)異步導(dǎo)出操作并立即返回。 |
@property (nonatomic, readonly) float progress;
以0
到1.0
的比例指定導(dǎo)出的進(jìn)度掐场。值為0
表示導(dǎo)出尚未開(kāi)始贩猎,值為1.0
表示導(dǎo)出已完成萍膛。此屬性不是可以進(jìn)行鍵值觀察的。
- (void)cancelExport;
函數(shù)名 | cancelExport |
---|---|
解釋 | 取消導(dǎo)出會(huì)話的執(zhí)行蝗罗。 |
備注 | 取消可以在導(dǎo)出運(yùn)行時(shí)被調(diào)用。 |
AVAssetExportSessionPresets
+ (NSArray<NSString *> *)allExportPresets;
函數(shù)名 | allExportPresets |
---|---|
解釋 | 返回所有可用的導(dǎo)出預(yù)設(shè)名稱沼琉。 |
返回值 |
NSArray ,包含每個(gè)可用預(yù)設(shè)名稱的NSString 打瘪。 |
備注 | 返回NSStrings 數(shù)組,其中包含所有可用預(yù)設(shè)的名稱闺骚。請(qǐng)注意,并非所有預(yù)設(shè)都是兼容所有AVAssets 虫碉。 |
+ (NSArray<NSString *> *)exportPresetsCompatibleWithAsset:(AVAsset *)asset;
函數(shù)名 | exportPresetsCompatibleWithAsset: |
---|---|
解釋 | 僅返回與給定AVAsset 對(duì)象兼容的標(biāo)識(shí)符。 |
參數(shù) |
asset :用于導(dǎo)出的 AVAsset 對(duì)象敦捧。 |
返回值 | 包含NSString 值的NSArray 碰镜,用于兼容導(dǎo)出類型的標(biāo)識(shí)符。該數(shù)組是可用作參數(shù)的有效標(biāo)識(shí)符的完整列表initWithAsset:presetName: 具有指定的asset 洋措。 |
備注 | 并非所有導(dǎo)出預(yù)設(shè)都與所有AVAsset 兼容。例如菠发,僅視頻asset 與僅音頻預(yù)設(shè)不兼容。此方法僅返回與給定asset 兼容的預(yù)設(shè)的標(biāo)識(shí)符滓鸠。客戶端應(yīng)傳入準(zhǔn)備導(dǎo)出的AVAsset 踱稍。為了確保使用給定預(yù)設(shè)的導(dǎo)出操作的設(shè)置和運(yùn)行成功,沒(méi)有重大變化(例如添加或刪除track )應(yīng)在檢索兼容標(biāo)識(shí)符和執(zhí)行導(dǎo)出操作之間對(duì)asset 進(jìn)行操作珠月。此方法將訪問(wèn)AVAsset 的tracks 屬性以構(gòu)建返回的NSArray 。為了避免阻塞調(diào)用線程啤挎,應(yīng)使用AVAsynchro 加載tracks 屬性 |
+ (void)determineCompatibilityOfExportPreset:(NSString *)presetName withAsset:(AVAsset *)asset outputFileType:(nullable AVFileType)outputFileType completionHandler:(void (^)(BOOL compatible))handler NS_AVAILABLE(10_9, 6_0);
函數(shù)名 | determineCompatibilityOfExportPreset:withAsset:outputFileType:completionHandler: |
---|---|
解釋 | 對(duì)導(dǎo)出預(yù)設(shè)卵凑,AVAsset 和輸出文件類型的兼容性執(zhí)行檢查。如果是兼容的勺卢,則使用YES 調(diào)用完成處理程序參數(shù)兼容;否則就是NO 。 |
參數(shù) |
presetName :NSStrin g黑忱,指定導(dǎo)出的預(yù)設(shè)模板的名稱勒魔。asset :用于導(dǎo)出的 AVAsset 對(duì)象酱塔。outputFileType :指示要檢查的文件類型的AVFileType;或者nil,查詢是否存在任何兼容類型唐全。 completionHandler :使用兼容性結(jié)果調(diào)用的 block 。 |
AVAssetExportSessionFileTypes
@property (nonatomic, readonly) NSArray<AVFileType> *supportedFileTypes;
根據(jù)初始化目標(biāo)的預(yù)設(shè)邮利,指示目標(biāo)可以寫(xiě)入的文件類型垃帅。
不執(zhí)行AVAsset
檢查以確定其內(nèi)容是否與支持的文件類型兼容。如果你需要在啟動(dòng)導(dǎo)出之前做出該決定贸诚,請(qǐng)使用- (void)determineCompatibleFileTypesWithCompletionHandler:(void(^)(NSArray * compatibleFileTypes))handler :.
- (void)determineCompatibleFileTypesWithCompletionHandler:(void (^)(NSArray<AVFileType> *compatibleFileTypes))handler NS_AVAILABLE(10_9, 6_0);
函數(shù)名 | determineCompatibleFileTypesWithCompletionHandler: |
---|---|
解釋 | 對(duì)初始化對(duì)象的AVAsset 和Preset 執(zhí)行檢查,以確定ExportSession 可以寫(xiě)入的文件類型列表酱固。 |
參數(shù) |
handler :當(dāng)檢查完成時(shí),使用一組文件類型調(diào)用 ExportSession 可以寫(xiě)入运悲。請(qǐng)注意,這可能計(jì)為零希停。 |
備注 | 此方法與supportedFileTypes 屬性的不同之處在于,它執(zhí)行AVAsset 的檢查宠能,以確定其與每個(gè)會(huì)話支持的文件類型的兼容性。 |
AVAssetExportSessionDurationAndLength
@property (nonatomic) CMTimeRange timeRange;
指定要從源導(dǎo)出的時(shí)間范圍棍潘。導(dǎo)出會(huì)話的默認(rèn)timeRange
為kCMTimeZero..kCMTimePositiveInfinity
崖媚,表示將導(dǎo)出asset
的完整持續(xù)時(shí)間恤浪。
@property (nonatomic, readonly) CMTime maxDuration API_AVAILABLE(macos(10.14), ios(4.0), tvos(9.0)) __WATCHOS_PROHIBITED;
根據(jù)源asset
,導(dǎo)出預(yù)設(shè)和fileLengthLimit
的當(dāng)前值水由,提供對(duì)可能導(dǎo)出的介質(zhì)的最大持續(xù)時(shí)間的估計(jì)。當(dāng)export
達(dá)到最大持續(xù)時(shí)間時(shí),export
不會(huì)停止;將timeRange
屬性設(shè)置為僅導(dǎo)出特定時(shí)間范圍呵恢。
@property (nonatomic) long long fileLengthLimit API_AVAILABLE(macos(10.14), ios(4.0), tvos(9.0)) __WATCHOS_PROHIBITED;
表示導(dǎo)出文件的估計(jì)字節(jié)大小媚创。導(dǎo)出預(yù)設(shè)為AVAssetExportPresetPassthrough
或AVAssetExportPresetAppleProRes422LPCM
時(shí)返回零。如果尚未設(shè)置timeRange
屬性的數(shù)值(即钞钙,not invalid
,indefinite
或infinite
)芒炼,則此屬性也將返回零。
指示會(huì)話輸出不應(yīng)超過(guò)的文件長(zhǎng)度本刽。根據(jù)源asset
的內(nèi)容,輸出可能略微超過(guò)文件長(zhǎng)度限制子寓。如果在使用輸出之前需要遵守嚴(yán)格的限制,則應(yīng)測(cè)試輸出文件的長(zhǎng)度别瞭。另請(qǐng)參見(jiàn)maxDuration和timeRange
。
AVAssetExportSessionMetadata
@property (nonatomic, copy, nullable) NSArray<AVMetadataItem *> *metadata;
指定要由導(dǎo)出會(huì)話寫(xiě)入輸出文件的AVMetadataItems
的NSArray
蝙寨。如果此鍵的值為nil
,則導(dǎo)出asset
中的任何現(xiàn)有元數(shù)據(jù)將盡可能準(zhǔn)確地轉(zhuǎn)換為輸出文件的相應(yīng)元數(shù)據(jù)鍵空間并寫(xiě)入輸出听系。
@property (nonatomic, retain, nullable) AVMetadataItemFilter *metadataItemFilter NS_AVAILABLE(10_9, 7_0);
指定在導(dǎo)出期間使用的過(guò)濾器對(duì)象,以確定應(yīng)從源asset
傳輸哪些元數(shù)據(jù)項(xiàng)靠胜。如果此鍵的值為nil
,則不應(yīng)用過(guò)濾器浪漠。這是默認(rèn)值霎褐。過(guò)濾器不會(huì)應(yīng)用于通過(guò)元數(shù)據(jù)屬性設(shè)置的元數(shù)據(jù)。要在元數(shù)據(jù)屬性上設(shè)置元數(shù)據(jù)之前將過(guò)濾器應(yīng)用于元數(shù)據(jù)冻璃,詳情請(qǐng)參閱AVMetadataItem
的AVMetadataItemArrayFiltering
類別中的方法损合。
AVAssetExportSessionMediaProcessing
@property (nonatomic, copy) AVAudioTimePitchAlgorithm audioTimePitchAlgorithm NS_AVAILABLE(10_9, 7_0);
指示用于管理縮放音頻編輯的音頻音調(diào)的處理算法娘纷。各種時(shí)間間距算法的常數(shù),例如赖晶, AVAudioTimePitchAlgorithmSpectral
,在AVAudioProcessingSettings.h
中定義嬉探。如果將此屬性設(shè)置為該文件中定義的常量以外的值,則將引發(fā)NSInvalidArgumentException
涩堤。默認(rèn)值為AVAudioTimePitchAlgorithmSpectral
。
@property (nonatomic, copy, nullable) AVAudioMix *audioMix;
指示是否啟用非默認(rèn)音頻混合以進(jìn)行導(dǎo)出胎围,并提供音頻混合的參數(shù)。導(dǎo)出預(yù)設(shè)為AVAssetExportPresetPassthrough
時(shí)忽略汽纤。
@property (nonatomic, copy, nullable) AVVideoComposition *videoComposition;
指示是否啟用視頻合成以進(jìn)行導(dǎo)出,并提供視頻合成的說(shuō)明蕴坪。導(dǎo)出預(yù)設(shè)為AVAssetExportPresetPassthrough
時(shí)忽略。
@property (nonatomic, readonly, nullable) id <AVVideoCompositing> customVideoCompositor NS_AVAILABLE(10_9, 7_0);
表示使用的自定義視頻合成器實(shí)例(如果有的話)背传。
AVAssetExportSessionMultipass
@property (nonatomic) BOOL canPerformMultiplePassesOverSourceMediaData NS_AVAILABLE(10_10, 8_0);
函數(shù)名 | canPerformMultiplePassesOverSourceMediaData |
---|---|
解釋 | 確定導(dǎo)出會(huì)話是否可以對(duì)源媒體執(zhí)行多次傳遞以獲得更好的結(jié)果。 |
備注 | 當(dāng)此屬性的值為YES 時(shí)径玖,導(dǎo)出會(huì)話可以以更長(zhǎng)的導(dǎo)出時(shí)間為代價(jià)生成更高質(zhì)量的結(jié)果。將此屬性設(shè)置為YES 還可能需要導(dǎo)出會(huì)話在導(dǎo)出期間將臨時(shí)數(shù)據(jù)寫(xiě)入磁盤(pán)梳星。要控制臨時(shí)數(shù)據(jù)的位置滚朵,請(qǐng)使用屬性directoryForTemporaryFiles 。默認(rèn)值為 NO 辕近。并非所有導(dǎo)出會(huì)話配置都可以通過(guò)源媒體執(zhí)行多次傳遞而受益。在這些情況下亏推,將此屬性設(shè)置為YES 無(wú)效。導(dǎo)出開(kāi)始后無(wú)法設(shè)置此屬性吞杭。 |
@property (nonatomic, copy, nullable) NSURL *directoryForTemporaryFiles NS_AVAILABLE(10_10, 8_0);
函數(shù)名 | directoryForTemporaryFiles |
---|---|
解釋 | 指定適合包含導(dǎo)出過(guò)程中生成的臨時(shí)文件的目錄 |
備注 | 當(dāng)以某種方式配置時(shí),AVAssetExportSession 可能需要編寫(xiě)臨時(shí)文件芽狗,例如當(dāng)canPerformMultiplePassesOverSourceMediaData 設(shè)置為YES 時(shí)。此屬性可用于控制文件系統(tǒng)中創(chuàng)建臨時(shí)文件的位置童擎。導(dǎo)出完成,取消或失敗時(shí)顾复,將刪除所有臨時(shí)文件。當(dāng)此屬性的值為 nil 時(shí)芯砸,導(dǎo)出會(huì)話將在編寫(xiě)臨時(shí)文件時(shí)選擇合適的位置。默認(rèn)值為nil 双揪。導(dǎo)出開(kāi)始后無(wú)法設(shè)置此屬性。如果 URL 指向的位置不是目錄渔期,不存在,不在本地文件系統(tǒng)上疯趟,或者無(wú)法在此目錄中創(chuàng)建文件(例如,由于權(quán)限不足或沙盒限制)几莽,導(dǎo)出將失敗)站欺。 |
上一章 | 目錄 | 下一章 |
---|