我正在使用AVFoundation的AVCaptureVideoDataOutput录制视频,并尝试在录制的视频上添加水印/标志。我的类被设置为sampleBufferDelegate,接收CMSamplebufferRefs。我已经对CMSampleBufferRefs CVPixelBuffer应用了一些效果,并将其传递回AVAssetWriter。
左上角的标志是使用透明PNG传递的。 我遇到的问题是,UIImage的透明部分一旦写入视频就变成了黑色。 有没有人知道我做错了什么或者可能忘记了些什么?
以下是代码片段:
看起来CIContext没有绘制CIImages的alpha通道。有什么想法吗?
左上角的标志是使用透明PNG传递的。 我遇到的问题是,UIImage的透明部分一旦写入视频就变成了黑色。 有没有人知道我做错了什么或者可能忘记了些什么?
以下是代码片段:
//somewhere in the init of the class;
_eaglContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
_ciContext = [CIContext contextWithEAGLContext:_eaglContext
options: @{ kCIContextWorkingColorSpace : [NSNull null] }];
//samplebufferdelegate method:
- (void) captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection {
CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(pixelBuffer, 0);
....
UIImage *logoImage = [UIImage imageNamed:@"logo.png"];
CIImage *renderImage = [[CIImage alloc] initWithCGImage:logoImage.CGImage];
CGColorSpaceRef cSpace = CGColorSpaceCreateDeviceRGB();
[_ciContext render:renderImage
toCVPixelBuffer:pixelBuffer
bounds: [renderImage extent]
colorSpace:cSpace];
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
CGColorSpaceRelease(cSpace);
....
}
看起来CIContext没有绘制CIImages的alpha通道。有什么想法吗?