我目前正在尝试将一些视频剪辑设置添加到 NSMutableDictionary,包括两个 CMTime 对象。

我正在尝试存储正在使用的视频流(用整数表示)、剪辑持续时间 (CMTime) 和剪辑开始时间 (CMTime),它们在代码的其他地方定义。

我可能是愚蠢的,但我无法弄清楚如何将 CMTimes 添加到字典中,我收到“将 'CMTime' 发送到不兼容类型 'id' 的参数”错误。

我尝试了 setObject 和 setValue 都没有成功,并且在任何地方都找不到答案。

NSMutableDictionary *clipDetails = [NSMutableDictionary dictionary];
[clipDetails setObject:[NSNumber numberWithInteger:currentStream] forKey:@"stream"];
[clipDetails setObject:startTime forKey:@"clipStart"];
[clipDetails setObject:duration forKey:@"duration"];

最佳答案

由于 CMTime 是一个结构体,您需要将它包装在一个 Objective C 类型中,通常使用 NSValue :

CMTime startTime = (...);
NSValue *startValue = [NSValue valueWithBytes:&startTime objCType:@encode(CMTime)];
[clipDetails setObject:startValue forKey:@"startTime"];

您可以像这样再次将其取出:
CMTime startTime;
NSValue *startValue = [clipDetails objectForKey:@"startTime"];
[startValue getValue:&startTime];

旁注,使用新的字典语法要容易得多:
clipDetails[@"startTime"] = ...;
NSValue *value = clipDetails[@"startTime"];

这些步骤适用于任何结构;事实证明,AVFoundation 框架为 CMTime 结构提供了方便的方法:
clipDetails[@"startTime"] = [NSValue valueWithCMTime:startTime];
CMTime startTime = [clipDetails[@"startTime"] CMTimeValue];

关于objective-c - 如何将CMTime添加到NSMutableDictionary?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21885683/

10-11 14:49