如何为AVVideoComposition设置透明背景?

5
更新 - 我为回答这个问题添加了50声望的赏金!
我有一个应用程序,需要将一些视频和照片组合起来创建电影。我正在使用AVMutableComposition完成这个任务。为了能够指示它如何组合视频,我必须使用AVMutableVideoComposition。这个东西有一个叫做backgroundColor的属性,苹果文档说:
只支持纯BGRA颜色;忽略图案和其他支持的颜色。如果渲染的像素缓冲区没有alpha,则背景颜色的alpha值将被忽略。
从这里我理解到,有一种方法可以向backgroundColor添加alpha通道,但我就是不明白怎么做这件事。 If the rendered pixel buffer does not have alpha, the alpha value of the background color is ignored.的意思是什么?我该如何添加这样的东西?
如果我只是做myVideoCompositionInstruction.backgroundColor = [[UIColor colorWithWhite:1 alpha:0] CGColor]; 它就不起作用——背景仍然是白色而不是透明的。
任何帮助都将不胜感激,谢谢!

有人能帮忙吗?我真的需要这个,但不知道该怎么做。 - Mihai Fratu
你尝试过使用myVideoCompositionInstruction.backgroundColor = [[UIColor clearColor] CGColor]吗? - joern
是的 - 它也不行 :( - Mihai Fratu
[UIColor redColor].CGColor怎么样?会变成红色吗?这至少可以消除您未正确使用属性的可能性。 - Vinnie
需要更多的代码来帮助解决问题。也许你可以将代码简化到非常基础的部分,并且贴出来吗? - Vinnie
显示剩余4条评论
1个回答

2
在苹果的AVVideoCompositionInstruction文档中,你想设置的属性backgroundColorCGColorRef类型。我猜测,因为你是用UIColor设置backgroundColor,然后通过CGColor属性获取其值,所以某种原因导致alpha值没有传递到CGColorRef对象中。你知道白色值被传递了,因为默认颜色是黑色。
UIColor有一些限制。我建议你阅读以下文章。特别注意文章中的"UIColor的问题"部分。
我猜你问题的最佳解决方案是直接使用CGColor定义backgroundColor(例如使用CGColorCreate),而不是使用UIColor。

谢谢你的建议。明天一到办公室我就会尝试,然后告诉你这个方法是否有效。 - Mihai Fratu
我尝试了这段代码:`CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); float transparentWhite[] = { 1, 1, 1, 0 }; CGColorRef backgroundColor = CGColorCreate(colorSpace, transparentWhite);_videoInstruction.backgroundColor = backgroundColor;`但仍然无法正常工作... - Mihai Fratu
我尝试了这个方法,白色颜色可以通过这种方法变得可见,但是 alpha 值被忽略了,即使我为渲染的像素缓冲区设置了不透明度。有任何想法为什么会发生这种情况以及有没有解决方法? - Deepak Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接