2

这段代码在模拟器上运行良好。但是,当我尝试在我的 iPad 上运行导出时,它总是以 0.14583-ish 的进度值挂起。有人可以帮我弄清楚为什么吗?被困在这个问题上已经有一段时间了。

这是我的代码:

NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:composition];
if ([compatiblePresets containsObject:AVAssetExportPresetLowQuality]) {
    AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]
                                           initWithAsset:composition presetName:AVAssetExportPresetLowQuality];


    exportSession.outputURL = [NSURL fileURLWithPath:[[ShowDAO getUserDocumentDir] stringByAppendingString:exportFilename]];
    exportSession.outputFileType = AVFileTypeQuickTimeMovie;

    CMTime start = CMTimeMakeWithSeconds(0, 1);
    CMTime duration = CMTimeMakeWithSeconds(1000, 1);
    CMTimeRange range = CMTimeRangeMake(start, duration);
    exportSession.timeRange = range;

    [exportSession exportAsynchronouslyWithCompletionHandler:^{
        switch ([exportSession status]) {
            case AVAssetExportSessionStatusCompleted:
                NSLog(@"Export Completed");
                break;
            case AVAssetExportSessionStatusFailed:
                NSLog(@"Export failed: %@", [[exportSession error] localizedDescription]);
                break;
            case AVAssetExportSessionStatusCancelled:
                NSLog(@"Export cancelled");
                break;
            default:
                break;
        }


    }];

    while(exportSession.progress != 1.0){
        NSLog(@"loading... : %f",exportSession.progress);
        sleep(1);
    }
    [exportSession release];

}
4

1 回答 1

3
while(exportSession.progress != 1.0){
    NSLog(@"loading... : %f",exportSession.progress);
    sleep(1);
}

这个while循环阻塞了主线程。NSLog 可能无法正常触发。在没有while循环的情况下试试?

于 2011-10-10T09:37:01.707 回答