나는 나의 iPhone의 비디오 카메라로부터받은 150 CMSampleBufferRef 배열을 수집하려고한다. 어떻게 든 카메라는 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];
그건 내 시작 녹음 방법이었습니다.
- (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
여기에는 버퍼 수집 방법이 사용됩니다.
답변을 찾았습니까? 나는 같은 문제가있어, 고마워! – Thomas
픽셀 버퍼의 복사본을 만들어야합니다. AVCapture는 풀에있는 샘플 버퍼를 재사용하고, 버퍼를 풀어 내기가 어려울 경우 (결과를 잡기 때문에) 출력을 생성하지 않게됩니다. –