我想收集到一個數組150個CMSampleBufferRef,我從我的iPhone的攝像機收到。 不知何故,相機在13個緩衝區後停止調用委託。 我嘗試使用NSMutableArray,CFArray。沒有幫助。 我懷疑它與記憶的東西,但我什麼都沒有記憶警告。緩衝CMSampleBufferRef到CFArray
我很樂意爲此提供一些幫助。
提前致謝。
session = [[AVCaptureSession alloc]init];
//Quality Preset
if ([session canSetSessionPreset:AVCaptureSessionPresetLow]) {
session.sessionPreset = AVCaptureSessionPresetLow;
}
[session beginConfiguration];
AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *newVideoDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:nil];
AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];
output.videoSettings = @{ (NSString *)kCVPixelBufferPixelFormatTypeKey : @(kCVPixelFormatType_32BGRA) };
dispatch_queue_t queue = dispatch_queue_create("MyQueue", NULL);
[output setSampleBufferDelegate:self queue:queue];
[session addOutput:output];
[session addInput:newVideoDeviceInput];
AVCaptureConnection *conn = [output connectionWithMediaType:AVMediaTypeVideo];
if (conn.supportsVideoMinFrameDuration)
conn.videoMinFrameDuration = CMTimeMake(1, 10);
if (conn.supportsVideoMaxFrameDuration)
conn.videoMaxFrameDuration = CMTimeMake(1, 10);
[session commitConfiguration];
arr = CFArrayCreateMutable(NULL, 150, &kCFTypeArrayCallBacks);
counter=0;
[session startRunning];
這是我的StartRecording方法。
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection {
if (counter==150) {
[self StopRecording:nil];
return;
}
CFArrayInsertValueAtIndex(arr, counter, sampleBuffer);
counter= (counter+1)%150;
}
@end
Tha's the buffer collection method。
您是否找到答案?我有同樣的問題,謝謝! – Thomas
您必須製作像素緩衝區的副本。 AVCapture重用池中的樣本緩衝區,如果他們無法解除分配它們(因爲您持有它們),它將停止產生輸出。 –