0

Я использую AVFoundation для захвата CMSampleBufferRef с камеры, а затем конвертирую его в CVPixelBufferRef, чтобы записать на видео. Что я хочу сделать, так это изменить некоторый пиксель внутри видеокадров. Вот почему мне нужно получить CVPixelBufferRef из моего CMSampleBuffer. Моя проблема заключается в том, что я не мог включать в себя звуковые данные оригинального CMSampleBuffer на мой новый CVPixelBufferRefCVPixelBuffer со звуком

Я также попытался воссоздать CMSampleBuffer с CVPixelBufferRef но он возвращает мне ошибку:

- (CMSampleBufferRef)newModifyImage:(CMSampleBufferRef)sampleBuffer { 
    CVImageBufferRef cvimgRef = CMSampleBufferGetImageBuffer(sampleBuffer); 
    CVPixelBufferLockBaseAddress(cvimgRef,0); 

    uint8_t *buf=(uint8_t *)CVPixelBufferGetBaseAddress(cvimgRef); 

    size_t bytesPerRow = CVPixelBufferGetBytesPerRow(cvimgRef); 
    size_t width = CVPixelBufferGetWidth(cvimgRef); 
    size_t height = CVPixelBufferGetHeight(cvimgRef); 


    CVPixelBufferRef pixelBufRef = NULL; 
    CMSampleBufferRef newSampleBuffer = NULL; 
    CMSampleTimingInfo timimgInfo = kCMTimingInfoInvalid; 
    CMSampleBufferGetSampleTimingInfo(sampleBuffer, 0, &timimgInfo); 

    OSStatus result = 0; 

    OSType pixFmt = CVPixelBufferGetPixelFormatType(cvimgRef); 

    CVPixelBufferCreateWithBytes(kCFAllocatorDefault, width, height, pixFmt, buf, bytesPerRow, NULL, NULL, NULL, &pixelBufRef); 

    CMVideoFormatDescriptionRef videoInfo = NULL; 

    result = CMVideoFormatDescriptionCreateForImageBuffer(NULL, pixelBufRef, &videoInfo); 

    CMSampleBufferCreateForImageBuffer(kCFAllocatorDefault, pixelBufRef, true, NULL, NULL, videoInfo, &timimgInfo, &newSampleBuffer); 
    return newSampleBuffer; 
} 

ответ