[英]AVAssetExportSession send cancel export
我正在制作一個視頻應用程序,在其中使用AVAssetExportSession創建新視頻。 在創建視頻時,我希望使用戶能夠取消視頻創建。 我遇到的問題是我不知道如何將取消請求發送到AVAssetExportSession,因為我假設它正在主線程上運行。 一旦啟動,我不知道如何發送停止請求?
我試過了但是沒用
- (IBAction) startBtn
{
....
// Export
exportSession = [[AVAssetExportSession alloc] initWithAsset:[composition copy] presetName:AVAssetExportPresetHighestQuality];
[exportSession setOutputFileType:@"com.apple.quicktime-movie"];
exportSession.outputURL = outputMovieURL;
exportSession.videoComposition = mainComposition;
//NSLog(@"Went Here 7 ...");
[exportSession exportAsynchronouslyWithCompletionHandler:^{
switch ([exportSession status])
{
case AVAssetExportSessionStatusCancelled:
NSLog(@"Canceled ...");
break;
case AVAssetExportSessionStatusCompleted:
{
NSLog(@"Complete ... %@",outputURL); // moview url
break;
}
case AVAssetExportSessionStatusFailed:
{
NSLog(@"Faild=%@ ...",exportSession.error);
break;
}
case AVAssetExportSessionStatusExporting:
NSLog(@"Exporting.....");
break;
}
}];
}
- (IBAction) cancelBtn
{
exportSession = nil;
}
您可以通過向出口會話發送消息cancelExport
來取消它。
為此,您只需要擁有一個保存當前活動導出會話的ivar(或屬性):
@property (nonatomic, strong) AVAssetExportSession* exportSession;
初始化屬性:
- (IBAction) startBtn {
if (self.exportSession == nil) {
self.exportSession = [[AVAssetExportSession alloc] initWithAsset:[composition copy]
presetName:AVAssetExportPresetHighestQuality];
...
[self.exportSession exportAsynchronouslyWithCompletionHandler:^{
self.exportSession = nil;
....
}];
}
else {
// there is an export session already
}
}
為了取消會話:
- (IBAction) cancelBtn
{
[self.exportSession cancelExport];
self.exportSession = nil;
}
提示:為了獲得更好的用戶體驗,您應該相應地禁用/啟用“取消”和“開始導出”按鈕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.