导出视频资产时出现未知异常

Posted

技术标签:

【中文标题】导出视频资产时出现未知异常【英文标题】:Unknown exception when exporting video asset 【发布时间】:2015-09-21 09:37:52 【问题描述】:

我有以下代码可以从照片中导出视频数据:

if (asset.mediaType == PHAssetMediaTypeVideo)

    [[PHImageManager defaultManager] requestAVAssetForVideo:asset options:nil resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) 
        AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetPassthrough];
        exportSession.outputFileType = AVFileTypeQuickTimeMovie;
        [exportSession exportAsynchronouslyWithCompletionHandler:^
            [[SharedManager sharedInstance] insertAttachment:exportSession.outputURL forEvent:event];
        ];
    ];

此代码在 [exportSession export...] 的行上引发了一个未识别的异常(禁用断点)。 ExportSession 有效,但是日志中显示outputFileType = (null),所以我不得不手动设置。

我可以看到视频的 URL,类似于 file://private.mobile....MOV,它是由相机捕获并存储在资产目录中(我可以通过照片观看)。长度为 2 秒。

请帮帮我。如何使用照片导出视频文件?

P.S.:使用 PHImageManager 导出图像效果很好。

【问题讨论】:

你说“未识别的异常”……你到底看到了什么? 我只看到一个异常(应用程序中断)告诉类似 EXC_BREAKPOINT 指向 [exportSession exportAsynchronously...] 的行。 如果它说断点,而你确实没有设置断点,这听起来像是 Xcode 糊涂了。 请检查我编辑的问题 你试过 [PHImageManager requestExportSessionForVideo:options:exportPreset:resultHandler:] 吗? (developer.apple.com/library/prerelease/ios/documentation/Photos/…) 【参考方案1】:

好的,我找到了问题所在。 文档中没有说,但是需要手动设置 outputURL。所以需要以下代码和平(来自这个答案https://***.com/a/20244790/773451):

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *outputURL = paths[0];
NSFileManager *manager = [NSFileManager defaultManager];
[manager createDirectoryAtPath:outputURL withIntermediateDirectories:YES attributes:nil error:nil];
outputURL = [outputURL stringByAppendingPathComponent:@"output.mov"];
// Remove Existing File
[manager removeItemAtPath:outputURL error:nil];
exportSession.outputURL = [NSURL fileURLWithPath:outputURL];

【讨论】:

以上是关于导出视频资产时出现未知异常的主要内容,如果未能解决你的问题,请参考以下文章

[NSNull CGImage]:选择资产并将其转换为 JPEG 时出现无法识别的选择器异常

在 Pygame 中加载资产时出现 FileNotFound 错误 [重复]

推送到 heroku 时出现“预编译资产失败”错误

Android - 从资产文件夹播放声音时出现问题

将 db 从资产复制到设备数据文件夹时出现 FileNotFoundException

azure 应用服务上的 Angular 应用 - 从资产文件夹加载配置文件时出现 404 错误