AVFoundation の AVCaptureVideoDataOutput を使用して録画しているビデオに透かし/ロゴを追加しようとしています。私のクラスは sampleBufferDelegate として設定され、CMSamplebufferRefs を受け取ります。すでにいくつかのエフェクトを CMSampleBufferRefs CVPixelBuffer に適用し、それを AVAssetWriter に戻しています。
左上隅のロゴは、透過 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 アルファを描画していないようです。何か案は?