2016-07-26 6 views
3

CMSampleBufferRef에서 CVPixelBufferRef를 가져 와서 CVPixelBufferRef를 변경하여 즉시 워터 마크를 오버레이하려고합니다.CMSampleBufferGetImageBuffer null을 반환했습니다.

나는 이것을 달성하기 위해 CMSampleBufferGetImageBuffer(sampleBuffer)을 사용 중입니다. 반환 된 CVPixelBufferRef의 결과를 인쇄하고 있지만 항상 null입니다.

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { 

    CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 

    NSLog(@"PixelBuffer %@",pixelBuffer); 
... 

} 

나는 무엇이 있습니까?

답변

4

디버깅 시간이 지나면 샘플이 비디오 또는 오디오 샘플 일 수 있습니다. 따라서 오디오 버퍼에서 CVPixelBufferRef를 얻으려고하면 null이 반환됩니다.

진행하기 전에 샘플 유형을 확인하여 해결했습니다. 오디오 샘플에 관심이 없기 때문에 단순히 오디오 샘플을 반환합니다.

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { 

    CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 

    CMFormatDescriptionRef formatDesc = CMSampleBufferGetFormatDescription(sampleBuffer); 
    CMMediaType mediaType = CMFormatDescriptionGetMediaType(formatDesc); 

    //Checking sample type before proceeding 
    if (mediaType == kCMMediaType_Audio) 
    {return;} 

//Processing the sample... 

}