CMSampleBufferRef から NSData オブジェクトを作成する方法は次のとおりです。
インターフェイス (.h) ファイルで、サンプル バッファー参照をプロパティとして追加し、同時にオブジェクトにキャストします。
@property (nonatomic, strong) __attribute__((NSObject)) CMSampleBufferRef sampleBuffer;
実装ファイル (.m):
CMSampleBufferRef sampleBuffer = (CMSampleBufferRef)[(AVAssetReaderTrackOutput *)[assetReader 出力][0] copyNextSampleBuffer];
NSPurgeableData *sampleBufferData = (NSPurgeableData *)[self imageToBuffer:sampleBuffer];
NSData オブジェクトからサンプル バッファにアクセスするには、単純にキャストを使用します。
(CMSampleBufferRef)sampleBufferData;
別の方法は次のとおりです。
- (NSData *) imageToBuffer:(CMSampleBufferRef)source {
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(source);
CVPixelBufferLockBaseAddress(imageBuffer,0);
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);
void *src_buff = CVPixelBufferGetBaseAddress(imageBuffer);
NSData *data = [NSData dataWithBytes:src_buff length:bytesPerRow * height];
CVPixelBufferUnlockBaseAddress(imageBuffer, 0);
return data;
}