0

AVFoundationを使用CMSampleBufferRefしてカメラからキャプチャし、それを変換しCVPixelBufferRefてビデオに書き込みます。私がやりたいのは、ビデオフレーム内のいくつかのピクセルを変更することです。だから私CVPixelBufferRefは自分のから抜け出す必要がありますCMSampleBuffer。私の問題は、オリジナルのオーディオデータをCMSampleBuffer新しいものに含めることができなかったことですCVPixelBufferRef

私もで再作成しようとしましCMSampleBufferCVPixelBufferRefが、エラーが返されます:

- (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;
}
4

1 に答える 1

1

RosyWriterサンプルコードを確認してくださいhttp://developer.apple.com/library/ios/#samplecode/RosyWriter/Introduction/Intro.html%23//apple_ref/doc/uid/DTS40011110

サンプルバッファからビデオとオーディオを書き込みます

于 2012-01-29T08:19:11.250 に答える