簡體   English   中英

AVAssetExportSession發送取消導出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM