Objective c AVVideoCompositionCoreAnimationTool使第一帧变黑

Objective c AVVideoCompositionCoreAnimationTool使第一帧变黑,objective-c,iphone,xcode,avfoundation,avmutablecomposition,Objective C,Iphone,Xcode,Avfoundation,Avmutablecomposition,当使用AVVideoCompositionCoreAnimationTool向我的一个视频添加文本覆盖时,第一帧通常是黑色的。当我注释掉属于动画工具及其设置的所有代码时,一切都按预期进行,第一帧永远不会是黑色的。因此,我开始认为,我的AVMutableComposition用于编写完成的视频,它确实按照预期工作,并且配置正确。以下代码用于设置文本层: CALayer* layer = [CALayer layer]; layer.frame = CGRectMake(0, 0, 480, 480

当使用AVVideoCompositionCoreAnimationTool向我的一个视频添加文本覆盖时,第一帧通常是黑色的。当我注释掉属于动画工具及其设置的所有代码时,一切都按预期进行,第一帧永远不会是黑色的。因此,我开始认为,我的AVMutableComposition用于编写完成的视频,它确实按照预期工作,并且配置正确。以下代码用于设置文本层:

CALayer* layer = [CALayer layer];
layer.frame = CGRectMake(0, 0, 480, 480);
layer.opacity = 0.0f;

CATextLayer* textLayer = [[CATextLayer alloc] init];
textLayer.frame = CGRectMake(0, 0, 450, 80);
[textLayer setString:@"mytext"];
textLayer.foregroundColor = [UIColor whiteColor].CGColor;
textLayer.alignmentMode = kCAAlignmentRight;
[textLayer setFont:CTFontCreateWithName((__bridge CFStringRef)@"HelveticaNeue", 18, &CGAffineTransformIdentity)];
[layer addSublayer:textLayer];

CALayer *parentLayer = [CALayer layer];
CALayer *videoLayer = [CALayer layer];

parentLayer.bounds = CGRectMake(0, 0, 480, 480);
parentLayer.anchorPoint =  CGPointMake(0, 0);
parentLayer.position = CGPointMake(0, 0);

videoLayer.bounds = CGRectMake(0, 0, 480, 480);
[parentLayer addSublayer:videoLayer];
videoLayer.position = CGPointMake(CGRectGetMidX(parentLayer.bounds), CGRectGetMidY(parentLayer.bounds));

textLayer.position = CGPointMake(CGRectGetMidX(layer.bounds), 20);

[parentLayer addSublayer:layer];
videoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];
有关如何解决此问题的任何想法?

请查看此链接

检查您是否已从初始时间(0秒)开始视频对话。因为我有相同的问题,添加文本到视频,我已经解决了它改变其初始时间


希望这能对你有所帮助。

对于未来的任何人,我都是这么做的:显然,AVVideoCompositionCoreAnimationTool对AVMutableVideoCompositions的效果不好。因此,我首先使用AVAssetExportSession导出视频和音频,但不使用CALayer,然后在第二次过程中添加覆盖层。我知道这可能不是一个“好”的解决方案,需要更多的处理,但最终它成功了。

我实际上已经在使用KCMTIME0RO了。你是如何解决这个问题的?kCMTimeZero不是您应该使用的;也不应该使用0。相反:将动画的beginTime属性设置为AvCoreAnimationBeginTimeZero而不是0(CoreAnimation将其替换为CACurrentMediaTime);您创建的视频文件是使用图像还是已添加到资源包中的默认视频?我合并了用户创建的视频和音频曲目。是否通过选择多个图像创建视频?或者通过使用摄像头录制视频?用户可以同时使用声音和视频曲目录制视频。然后对音轨进行处理,并将其重新添加到视频中,以产生最终结果