3

私は AVCapturesession を使用してビデオを録画しています。私は CMSamplbufferRef の形式で、ディドレシブ サンプル バッファ メソッドで受信しています。それを CIImage に変換し、いくつかの変更を加えました。今、その CIImage を CMSampleBufferRef に変換したいのですが、誰か助けてください。私はたくさんブラウジングしましたが、ここで見つけられるといいのですが、これに対する答えが見つかりませんでした。

4

1 に答える 1

2

私はクレジットを取りません。クレジットは次のとおりです: Crop CMSampleBufferRef

CVPixelBufferRef pixelBuffer;
CVPixelBufferCreate(kCFAllocatorSystemDefault, 640, 480, kCVPixelFormatType_32BGRA, NULL, &pixelBuffer);

CVPixelBufferLockBaseAddress( pixelBuffer, 0 );

CIContext * ciContext = [CIContext contextWithOptions: nil];
[ciContext render:ciImage toCVPixelBuffer:pixelBuffer];
CVPixelBufferUnlockBaseAddress( pixelBuffer, 0 );

CMSampleTimingInfo sampleTime = {
    .duration = CMSampleBufferGetDuration(sampleBuffer),
    .presentationTimeStamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer),
    .decodeTimeStamp = CMSampleBufferGetDecodeTimeStamp(sampleBuffer)
};

CMVideoFormatDescriptionRef videoInfo = NULL;
CMVideoFormatDescriptionCreateForImageBuffer(kCFAllocatorDefault, pixelBuffer, &videoInfo);

CMSampleBufferRef oBuf;
CMSampleBufferCreateForImageBuffer(kCFAllocatorDefault, pixelBuffer, true, NULL, NULL, videoInfo, &sampleTime, &oBuf);
于 2013-11-11T21:42:01.143 に答える