我已经搜索并阅读了文档,但我似乎无法找到解决我遇到的这个(看似简单的)问题的方法。我的歌曲从用户的 iTunes 库中导出工作正常,并且每次都下载到用户的文档文件夹中没有问题,但视频似乎不起作用。
我让它显示一个 MPMediaPickerController (allowsPickingMultipleItems = YES) 以允许用户从他们下载的库中选择视频或歌曲。完成后,这是我正在使用的相关代码:
- (void)mediaPicker:(MPMediaPickerController*)mediaPicker didPickMediaItems:(MPMediaItemCollection*)mediaItemCollection {
AVAssetExportSession *exportSession;
for (MPMediaItem *item in mediaItemCollection.items) {
NSURL *assetUrl = [item valueForProperty:MPMediaItemPropertyAssetURL];
MPMediaType type = [[item valueForProperty:MPMediaItemPropertyMediaType] intValue];
if (type >= MPMediaTypeMovie) {
exportSession = [[AVAssetExportSession alloc] initWithAsset:[AVAsset assetWithURL:assetUrl] presetName:AVAssetExportPreset640x480];
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
filePath = [title stringByAppendingString:@".mov"];
exportSession.outputURL = [NSURL fileURLWithPath:[[NSFileManager documentDirectory] stringByAppendingPathComponent:filePath]];
} // .. check for song-types here and set session up appropriately
[exportSession exportAsynchronouslyWithCompletionHandler:^{
// never gets into AVAssetExportSessionStatusCompleted here for videos
}
}
}
我每次得到的错误如下:
Error Domain=AVFoundationErrorDomain Code=-11820 "Cannot Complete Export" UserInfo=0x1e1a2180 {NSLocalizedRecoverySuggestion=Try exporting again., NSLocalizedDescription=Cannot Complete Export}
不是很有帮助。:( 我觉得我可能在这里遗漏了一些明显的东西。我这样做的方法是否正确?我试图将其“强制”为 MOV 格式是否可能存在问题?或者可能需要不同的设置方式导出会话?
作为参考,我在 iPhone 5 上使用 iOS 6.0.1 进行测试,baseSDK 为 6.0。提前感谢您对此提供的任何指导!
附加信息#1:奇怪的东西。如果我将 outputFileType 设置为“AVFileTypeAppleM4V”,它似乎会立即因“SIGTRAP”而崩溃。我想尝试 M4V,因为当我对assetURL 进行日志输出时,我会看到类似:ipod-library://item /item.m4v?id=12345。不知道这是否会有所不同,但奇怪的是,如果我尝试 m4v 格式,它就会像那样崩溃。可能是因为它不在支持的文件类型列表中(请参阅下一个信息点)。
附加信息#2:我得到的支持文件类型(通过调用“supportedFileTypes”方法是:“com.apple.quicktime-movie”和“public.mpeg-4”。“exportPresetsCompatibleWithAsset”包括所有视频文件,包括 m4a、低/中/高质量和特定尺寸。我已经尝试了所有这些的所有组合,例如文件类型的 AVFileTypeQuickTimeMovie 和 AVFileTypeMPEG4,以及所有预设,包括低/中/高,以及所有维度的。我永远不会失败,我得到“无法完成导出”错误。
附加信息#3:我也在使用 5.1 的部署目标。但是,是的,我试过 6.0,它给出了同样的错误。:(
附加信息#4:如果需要知道,我正在测试的电影是“试播”电视节目,一个视频,是我在 iTunes 中看到的第一个免费视频。所以我下载了它以在这个应用程序中使用。
附加信息#5:不确定这是否重要,但“hasProtectedContent”方法为 AVAsset(如果我转换,则为 AVURLAsset)返回 YES。可能没有什么不同,但我想我会把它扔在那里。