ios - 尝试将视频与 AVMutableComposition : "objects cannot be nil". 合并时出现异常错误..但它们似乎并不为零?

标签 ios objective-c nsmutablearray avfoundation avmutablecomposition

我的大脑感觉就像炒鸡蛋......我正在尝试将视频剪辑合并在一起。我将每个剪辑 URL 存储在 NSMutableArray (arrayClipURL) 中,这一切都很好。当我在调试控制台中打印 timeRanges 和 track(均为 NSMutableArrays)时,一切都会检查完毕,这意味着 for 循环正在执行其工作。我不断收到异常错误:“* -[__NSArrayM insertObject:atIndex:]:对象不能为零”。

我添加了一个异常断点并在下面的最后一行处中断。我无法弄清楚,因为 timeRanges 和 track 都不为零...我可以在调试控制台中打印它们,并在中断行之前直接看到它们。

composition = [[AVMutableComposition composition] init];

composedTrack = [[AVMutableCompositionTrack alloc] init];
composedTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo
                                         preferredTrackID:kCMPersistentTrackID_Invalid];

NSMutableArray * timeRanges = [[NSMutableArray alloc] initWithCapacity:arrayClipURL.count];
NSMutableArray * tracks = [[NSMutableArray alloc] initWithCapacity:arrayClipURL.count];

for (int i=0; i<[arrayClipURL count]; i++){
    AVURLAsset *assetClip = [[AVURLAsset alloc] initWithURL:[arrayClipURL objectAtIndex:i] options:nil];
    AVAssetTrack *clipTrack = [[AVAssetTrack alloc] init];
    clipTrack = [[assetClip tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
    [timeRanges addObject:[NSValue valueWithCMTimeRange:CMTimeRangeMake(kCMTimeZero, assetClip.duration)]];
    [tracks addObject:clipTrack];
}
debug(@"timeranges:  %@",timeRanges);
debug(@"tracks:  %@",tracks);

[composedTrack insertTimeRanges:timeRanges ofTracks:tracks atTime:kCMTimeZero error:nil]; 

我需要一些资深人士的帮助:(知道是什么导致了这个问题吗?

编辑: 以下是这两个数组在控制台中的打印效果。我唯一能想到的是 CMTimeRange 或 AVAssetTrack 可能在数组中格式不正确???我不知道。只是认为这可能有助于了解抛出异常时实际尝试插入的内容。

    2013-02-18 13:18:20.811 app[5242:907] [AVCaptureManager.m:401] timeranges array:  (
    "CMTimeRange: {{0/1 = 0.000}, {498/600 = 0.830}}",
    "CMTimeRange: {{0/1 = 0.000}, {556/600 = 0.927}}"
)
2013-02-18 13:18:20.812 app[5242:907] [AVCaptureManager.m:402] tracks array:  (
    "<AVAssetTrack: 0x220c21a0, trackID = 1, mediaType = vide>",
    "<AVAssetTrack: 0x1cdec820, trackID = 1, mediaType = vide>"
)

最佳答案

您的问题是由 AVURLAsset 实例的范围引起的

由于您在 for 循环内部使用了 AVURLAsset *assetClip,因此它在循环之外无效,您提取的轨道也无效。

如果您将 assetClip 保存在一个在 for 循环范围内仍然存在的数组中,它应该可以解决您的问题

关于ios - 尝试将视频与 AVMutableComposition : "objects cannot be nil". 合并时出现异常错误..但它们似乎并不为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14942938/

相关文章:

iphone - 奇怪的 NSMutable 数组错误

ios - Objective C 文本字段格式化程序逗号每两个数字

c++ - ObjC 中 & 的等价物是什么?

ios - 使用 spritekit 使 Sprite 快速移动

iphone - CallStateDisconnected 仅检测到来电,而不检测从我的应用发出的调用

objective-c - 如何理解这个崩溃日志

ios - 找不到我的应用程序崩溃的原因

ios - 如何比较两个 NSMutableArray?

ios - 尝试制作简单的 UIImageVIew 动画

ios - 升级的取消通知和 Apple 订阅通知的客户支持取消通知的负载差异