带有和没有断点的AVAssetExportSession

Dha*_*wal 1 iphone objective-c avfoundation ios4 avassetexportsession

我在低质量转换中使用简单的视频压缩代码.我正在使用IOS-4.2.1在iphone 4中测试我的代码.问题是当我在没有断点的设备上测试我的代码时代码无法创建视频(它只是零创建kb文件或空文件)但是当我逐行使用断点检查这段代码时,它会生成一个完美的压缩视频,也可以在mac中的quicktime播放器上运行.压缩后我制作了这个视频文件的zip.

NSURL *videoURL=[[self.videourlarray objectAtIndex:i] valueForKey:UIImagePickerControllerReferenceURL];
        NSURL *outputURL = [NSURL fileURLWithPath:videoFile];

        [[NSFileManager defaultManager] removeItemAtURL:outputURL error:nil];
        AVURLAsset *asset = [AVURLAsset URLAssetWithURL:videoURL options:nil];
        AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetLowQuality];
        exportSession.outputURL = outputURL;
        exportSession.shouldOptimizeForNetworkUse = YES;
        exportSession.outputFileType = AVFileTypeQuickTimeMovie;
        [exportSession exportAsynchronouslyWithCompletionHandler:^(void) 
         {
             NSLog(@"Export Complete %d %@", exportSession.status, exportSession.error);
             [exportSession release];
         }];
Run Code Online (Sandbox Code Playgroud)

thanx任何帮助......

Geo*_*ook 6

我认为你需要确保你没有搞乱线程..(AVFoundation指南说导出器不能保证在任何特定线程上运行).

使用这样的块.

    [exportSession exportAsynchronouslyWithCompletionHandler:^(void) 
    {
    dispatch_async(dispatch_get_main_queue(), ^{
         NSLog(@"Export Complete %d %@", exportSession.status, exportSession.error);
            });

     }];
Run Code Online (Sandbox Code Playgroud)

我个人会从块中调用一个委托,但我认为你的简单日志语句只适用于这个例子,你已经知道:)