- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我正在编写一个使用 AVFoundation 处理视频的应用程序。
我的应用程序的行为很简单:我从相机胶卷中拍摄视频,然后创建一个带有一些音轨的 AVMutableComposition。通过混合合成,我初始化了一个 AVAssetExportSession,它将视频文件存储在我的应用程序的文档目录中。
到此为止一切正常:我的视频已存储,我可以在另一个 Controller 中播放它。如果我将刚刚存储在我的文档文件夹中的视频进行一些编辑(以与第一次 AVmutableComposition,AVAssetExportSession 相同的方式),它又可以了。
但是我第三次执行此过程来编辑视频时,AVAssetExportSession 状态变为“失败”并出现此错误:
"Domain=AVFoundationErrorDomain Code=-11820 "Cannot Complete Export" UserInfo=0x1a9260 {NSLocalizedRecoverySuggestion=Try exporting again., NSLocalizedDescription=Cannot Complete Export}"
我读到这是无法导出 session 的一般错误。这是什么意思?为什么我只进行了第三次编辑过程?可能是内存管理错误?一个错误?这是我的 AVAssetExportSession 的代码:
_assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetHighestQuality];
_assetExport.shouldOptimizeForNetworkUse = YES;
///data odierna
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"ddMMyyyyHHmmss"];
NSDate *now = [[NSDate alloc] init];
NSString *dateString = [format stringFromDate:now];
[now release];
[format release];
NSString* ext = @".MOV";
NSString* videoName=[NSString stringWithFormat:@"%@%@", dateString, ext];
///data odierna
NSString *exportPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:videoName];
if ([[NSFileManager defaultManager] fileExistsAtPath:exportPath])
{
[[NSFileManager defaultManager] removeItemAtPath:exportPath error:nil];
}
_assetExport.outputFileType = AVFileTypeQuickTimeMovie;
[_assetExport setTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration)];
NSURL *exportUrl = [NSURL fileURLWithPath:exportPath] ;
_assetExport.outputURL = exportUrl ;
[_assetExport exportAsynchronouslyWithCompletionHandler:^
{
switch (_assetExport.status)
{
case AVAssetExportSessionStatusFailed:
{
NSLog (@"FAIL %@",_assetExport.error);
if ([[NSFileManager defaultManager] fileExistsAtPath:[_assetExport.outputURL path]])
{
[[NSFileManager defaultManager] removeItemAtPath:[_assetExport.outputURL path] error:nil];
}
[self performSelectorOnMainThread:@selector (ritenta)
withObject:nil
waitUntilDone:NO];
break;
}
case AVAssetExportSessionStatusCompleted:
{
NSLog (@"SUCCESS");
[self performSelectorOnMainThread:@selector (saveVideoToAlbum:)
withObject:exportPath
waitUntilDone:NO];
break;
}
case AVAssetExportSessionStatusCancelled:
{
NSLog (@"CANCELED");
break;
}
};
}];
我在网上做了很多搜索,有些人在 session 的 outputURL 中遇到了问题,但我已经尝试过并且在我的代码中似乎一切正常。我使用 NSDate 为文件分配一个唯一的名称。出于调试目的,我尝试恢复标准字符串名称,但问题仍然存在。有任何想法吗?有人可以向我建议一种替代方法,以使用 AssetWriter insted AVassetExportSession 将 Assets 导出到文档文件夹吗?
最佳答案
问题是 _assetExport.outputFileType
您设置了类型 AVFileTypeQuickTimeMovie
。这不太可能是受支持的类型。
尝试使用以下代码找出 _assetExport 支持的输出文件类型并使用合适的类型。
NSLog (@"created exporter. supportedFileTypes: %@", exporter.supportedFileTypes);
或者
只需更改
_assetExport.outputFileType = AVFileTypeQuickTimeMovie;
到
exporter.outputFileType = @"com.apple.m4a-audio";
也不要忘记更改扩展名
NSString* ext = @".MOV"; to @".m4a"
这应该有效。它对我有用。
关于iphone - AVAssetExportSession 错误 -11820,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5624150/
我有一个应用程序,允许附加多个视频资源并向合成添加一个或多个音轨。一切似乎都有效,我可以使用 AVPlayer 播放生成的作品(尽管音频级别似乎很低)。将乐曲导出到文件后,音轨丢失。 我的代码主要基于
我有一个应用程序,可以将 AVMutableComposition 导出到 .mov 文件中,我希望用户可以使用进度条与发送短信或上传文件时的进度条相同。 当我知道任务的持续时间(例如播放音频文件)时
当应用程序在后台运行时,我尝试管理 AVAssetExportSession 工作。我有 iOS 6 设备并在那里进行测试。所以我正在制作音频混合并尝试导出音频。当应用程序在前台时,我一切正常,但如果
我正在尝试使用以下代码将2个预先存在的mpeg4视频加入到ipad2上。 -(void)mergeTestVideos { //setup asset NSString *firsta
我正在创建一个视频文件,并在其上添加动画图像。我跟踪导出进度和状态,但是在导出进度达到1.0后,不会调用回调,并且导出状态仍等于'AVAssetExportSessionStatusExporting
我想合并视频和音频文件。我的程序在调试/单步模式下按我想要的方式工作,但在运行时不工作。我想这可能是“exportAsynchronously”函数的问题,我在加载之前访问了一些值。这是我的代码。 合
AVAssetExportSession 从来没有告诉我导出何时完成,但它确实很快并且文件出现在应该出现的位置......我正在使用 exportAsynchronouslyWithCompletio
我正在尝试在应用程序中裁剪和合并多个视频。我在步骤的最后部分遇到问题,我需要将视频保存到相机卷轴并且 UIVideoAtPathIsCompatibleWithSavedPhotosAlbum 返回
我想在自定义 View 中录制视频,所以我按照以下代码使用 AVFoundation。 if ([library videoAtPathIsCompatibleWithSavedPhotosAlbum
我正在使用 AVAssetExportSession 将多个视频合并在一起,但视频是立体声的,生成的视频是双单声道的。是否可以使用 AVAssetExportSession 合并视频并保持立体声 ch
我有一个应用程序可以将视频文件组合在一起制作一个长视频。视频之间可能会有延迟(例如,V1 从 t=0s 开始并运行 5 秒,V1 从 t=10s 开始)。在这种情况下,我希望视频卡住 V1 的最后一帧
我正在使用 AVAssetExportSession 以 640x480 的分辨率导出一些东西,这些文件有点怪异——可以预见的是怪异,但仍然怪异,因为我们需要通过 3G 网络从手机上传它们。除了降低分
我的目标是让用户从照片中选择视频,然后让他在上面添加标签。 这是我得到的: let audioAsset = AVURLAsset(url: selectedVideoURL) let videoAs
我有一个错误和一个问题。我想将修改后的视频导出到相机胶卷,但导出的视频与相机胶卷不兼容。 我也想删除最初录制的视频,以便我可以录制不止一次,但它会产生错误并且没有意义。如果我取消注释代码,则会出现错误
我正在尝试在视频的 AVMutableComposition 上应用 AVMutableVideoCompositionLayerInstruction。问题是当使用 AVAssetExportSes
我正在尝试将 2 个音频文件和 1 个视频文件合并为 1 个 .mov 文件。我用下一个代码实现它: -(void)combineData{ AVMutableComposition *mixComp
当应用程序在后台时,我无法让 AVAssetExportSession 工作。 我的应用程序启用了后台模式“Background Fetch”。 当这个 UIApplicationDelegate 方
我正在尝试对共享扩展中选择的视频使用 AVAssetExportSession 并获取 Error Domain=NSURLErrorDomain Code=-3000 "Cannot create
AVAssetExportSession 将预设作为其初始化参数之一: AVAssetExportSession(asset: AVAsset, presetName: String) 其中预设是 A
我正在使用 AVAssetExportSession 修剪音频文件,但无法在保存的文件中实现淡入淡出效果。这是我正在使用的代码。 [[NSFileManager defaultManag
我是一名优秀的程序员,十分优秀!