objective-c - 为什么 AVAssetExportSession 会产生一个空文件?

标签 objective-c ios video avfoundation avassetexportsession

我正在尝试从 UIImagePickerController 创建的源视频中导出 .mov 文件。问题是 AVAssetExportSession 创建的输出文件只有 668 字节。为什么会失败?我的代码:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    NSURL *imagePickerVideoURL = [info objectForKey:UIImagePickerControllerMediaURL];
    NSString *filename = @"vid1.mov";

    AVAsset *video = [AVAsset assetWithURL:imagePickerVideoURL];
    AVAssetExportSession *exportSession
      = [AVAssetExportSession exportSessionWithAsset:video presetName:AVAssetExportPresetMediumQuality];
    exportSession.shouldOptimizeForNetworkUse = YES;
    exportSession.outputFileType = AVFileTypeQuickTimeMovie;
    exportSession.outputURL = [pathToSavedVideosDirectory URLByAppendingPathComponent:filename];
    NSLog(@"processing video...: %@", exportSession);
    [exportSession exportAsynchronouslyWithCompletionHandler:^{
                       NSLog(@"done processing video!");
                   }];
}

最佳答案

我猜这是因为 exportSession 没有保留在内存中,因此在 didFinishPickingMediaWithInfo 完成后(在导出 session 完成处理程序运行之前)被杀死。

exportSession 存储到 @property 或更改完成处理程序以复制对 exportSession 的引用,如下所示:

[exportSession exportAsynchronouslyWithCompletionHandler:^{
       if (AVAssetExportSessionStatusCompleted == exportSession.status)
       {
           NSLog(@"done processing video!");
       }
}];

关于objective-c - 为什么 AVAssetExportSession 会产生一个空文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11754304/

相关文章:

ios - subscriberCellularProviderDidUpdateNotifier 从未被调用

objective-c - Objective-C 字典是有序容器吗?

iphone - 为 iphone 创建图标的工具

ios - 按设置距离对 UIImageView 进行动画处理

php - 使用 PHP/MySQL 将视频上传到文件夹及其到数据库的链接

html - Canvas 到视频在 Safari Lion/Mountain Lion 上非常慢

iphone - 来自 GCD 的线程读取旧值

ios - Watchkit-应用程序 : handleWatchKitExtensionRequest error

ios - 尝试在 Swift 中初始化 UIActionSheet 时出现 EXC_BAD_ACCESS

ios - YTPlayerView youtube-ios-player-helper 暂停不工作