Ben bununla deliriyorum - her yere baktım ve bir şey denedim ve düşündüğüm her şeyi.AVCapture appendSampleBuffer
iPhone kamerayı kullanarak AVFoundation - özellikle AVCapture kullanan bir iPhone uygulaması yapıyorum.
Kayıtta yer alan video beslemesinde yer alan özel bir görüntünün olması gerekir.
Şimdiye kadar AVCapture oturumunu kurdum, beslemeyi görüntüleyebilir, kareye erişebilir, bir UIImage olarak kaydedebilir ve bindirme resmini üzerine taşıyabilir. Ardından bu yeni UIImage'ı bir CVPixelBufferRef'e dönüştürün. bufferRef'in çalıştığını iki kez kontrol etmek için bir UIImage'a dönüştürdüm ve görüntüyü hala iyi görünüyor.
CVCixelBufferRef'i AVCaptureSessions assetWriterInput'a eklemek için CMSampleBufferRef'e dönüştürmeye çalıştığımda sorun başlıyor. Oluşturmaya çalıştığımda CMSampleBufferRef her zaman NULL döndürüyor. (Boşluk) captureOutput fonksiyonunu
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
{
UIImage *botImage = [self imageFromSampleBuffer:sampleBuffer];
UIImage *wheel = [self imageFromView:wheelView];
UIImage *finalImage = [self overlaidImage:botImage :wheel];
//[previewImage setImage:finalImage]; <- works -- the image is being merged into one UIImage
CVPixelBufferRef pixelBuffer = NULL;
CGImageRef cgImage = CGImageCreateCopy(finalImage.CGImage);
CFDataRef image = CGDataProviderCopyData(CGImageGetDataProvider(cgImage));
int status = CVPixelBufferCreateWithBytes(NULL,
self.view.bounds.size.width,
self.view.bounds.size.height,
kCVPixelFormatType_32BGRA,
(void*)CFDataGetBytePtr(image),
CGImageGetBytesPerRow(cgImage),
NULL,
0,
NULL,
&pixelBuffer);
if(status == 0){
OSStatus result = 0;
CMVideoFormatDescriptionRef videoInfo = NULL;
result = CMVideoFormatDescriptionCreateForImageBuffer(NULL, pixelBuffer, &videoInfo);
NSParameterAssert(result == 0 && videoInfo != NULL);
CMSampleBufferRef myBuffer = NULL;
result = CMSampleBufferCreateForImageBuffer(kCFAllocatorDefault,
pixelBuffer, true, NULL, NULL, videoInfo, NULL, &myBuffer);
NSParameterAssert(result == 0 && myBuffer != NULL);//always null :S
NSLog(@"Trying to append");
if (!CMSampleBufferDataIsReady(myBuffer)){
NSLog(@"sampleBuffer data is not ready");
return;
}
if (![assetWriterInput isReadyForMoreMediaData]){
NSLog(@"Not ready for data :(");
return;
}
if (![assetWriterInput appendSampleBuffer:myBuffer]){
NSLog(@"Failed to append pixel buffer");
}
}
}
Ben Dağınık CMSampleBufferRef sarma yapmak için ihtiyacı ortadan kaldıran bir AVAssetWriterInputPixelBufferAdaptor kullanıyor hakkında işitme tutmak Başka bir çözüm - İşte
olduğunu. Bununla birlikte, yığınlanmış ve Apple geliştirici forumları ve dokümanlarını inceledim ve bunun nasıl ayarlanacağına veya nasıl kullanılacağına dair net bir açıklama veya örnek bulamıyorum. Herhangi birinin üzerinde çalışan bir örneği varsa, lütfen bana şunu gösterebilir veya yukarıdaki sorunun cevabını vermeme yardımcı olabilirsiniz - bir hafta boyunca bu non-stop üzerinde çalışıyorum ve sonuçta bekliyorum.Michael Sen AVAssetWriterInputPixelBufferAdaptor ihtiyaç
Kod biçimlendirmesi eksikliğinden dolayı üzgünüz - önizlemede sorun çıkmış: S –