在同一视图中重叠2个QTDeviceInput

时间:2011-08-18 09:52:10

标签: video video-capture qtkit

我正在编写一个可以编辑来自不同QTDeviceInputs的流视频的可可应用程序。 此时我可以在2个不同的QTCaptureView中轻松显示2个QtDeviceInput,但我想知道是否可以在单个视图中重叠(可能具有透明度)来自外部凸轮的流。 我必须使用哪种视图来重叠视频流? 我如何重叠这两个视频流?

我想我必须使用OpenGlView,但我从未使用它,我想知道是否有更简单的方法。


我尝试按照以下方式创建2 QTCaptureLayer

layer1=[[QTCaptureLayer alloc]initWithSession:session1];
layer2=[[QTCaptureLayer alloc]initWithSession:session2];

其中session1session2为2 QTCaptureSession,我用它来显示2 QTDeviceInput。 比我在NSView

中添加了图层
 [[myView layer] addSublayer:layer1];

但没有改变。我在界面构建器中创建了NSView“myView”,并将其链接到文件的所有者。 我还尝试绘制一个简单的CALayer并将其添加到myView:

CALayer *layer = [CALayer layer];

layer.backgroundColor = CGColorCreateGenericRGB(0,0,0,1.0f);
layer.borderColor=CGColorCreateGenericRGB(100,100,100,1.0f);
layer.borderWidth=4.0;

NSRect rect = NSMakeRect(0, 0, 1000, 1000);

layer.frame = NSRectToCGRect(rect);
layer.cornerRadius = rect.size.height/5;

// Insert the layer into the root layer
[[myView layer] addSublayer:layer];

但没有发生任何事。 NSView没有变化!我做错了什么?


我尝试按照以下方式创建2 QTCaptureLayer

layer1=[[QTCaptureLayer alloc]initWithSession:session1];
layer2=[[QTCaptureLayer alloc]initWithSession:session2];

其中session1session2为2 QTCaptureSession,我用它来显示2 QTDeviceInput。 比我在NSView

中添加了图层
 [[myView layer] addSublayer:layer1];

但没有改变。我在界面构建器中创建了NSView“myView”,并将其链接到文件的所有者。 我还尝试绘制一个简单的CALayer并将其添加到myView:

CALayer *layer = [CALayer layer];

layer.backgroundColor = CGColorCreateGenericRGB(0,0,0,1.0f);
layer.borderColor=CGColorCreateGenericRGB(100,100,100,1.0f);
layer.borderWidth=4.0;

NSRect rect = NSMakeRect(0, 0, 1000, 1000);

layer.frame = NSRectToCGRect(rect);
layer.cornerRadius = rect.size.height/5;

// Insert the layer into the root layer
[[myView layer] addSublayer:layer];

但没有发生任何事。 NSView没有变化!我做错了什么?

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,则无需使用OpenGLView:

有一个名为QTCaptureLayer的课程,可以帮助您实现自己想要的目标。您所需要的只是一个由NSView支持的图层,您可以将捕获图层添加为子图层。

对于混合和类似用途,您可以使用捕获图层'opacitymaskcompositingFilter属性 - 具体取决于您想要达到的效果。