2016-07-26 6 views
3

私は、CVPixelBufferRefをウォーターマークをオンザフライでオーバーレイするように、CMSampleBufferRefから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... 

}