AVFoundationを使ったキャプチャ機能
- 8. AVCaptureDevice
• デバイスそのものを表現するクラス
self.camera =
[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
@property(nonatomic) AVCaptureFocusMode focusMode;
@property(nonatomic) CGPoint focusPointOfInterest;
…
@property(nonatomic, readonly) AVCaptureDevicePosition position;
@property(nonatomic) AVCaptureExposureMode exposureMode;
@property(nonatomic) AVCaptureWhiteBalanceMode whiteBalanceMode;
- 15. AVCaptureVideoDataOutput
• 映像の各フレームをそのまま取得できるクラス
self.videoDataOutput = [[AVCaptureVideoDataOutput alloc] init];
self.videoDataOutput.videoSettings =
@{ (NSString *)kCVPixelBufferPixelFormatTypeKey : @(kCVPixelFormatType_32BGRA) };
self.videoDataQueue =
dispatch_queue_create("jp.co.xxx.videoDataQueue", DISPATCH_QUEUE_SERIAL);
[self.videoDataOutput setSampleBufferDelegate:self queue:self.videoDataQueue];
[self.session addOutput:self.videoDataOutput];
映像フレームのキャプチャ準備完了
- 19. Tips
• AVCaptureSession startRunning
• AVCaptureVideoPreviewLayerの生成が遅い
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
AVCaptureVideoPreviewLayer *previewLayer =
[[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session];
[self.session startRunning];
!
dispatch_async(dispatch_get_main_queue(), ^{
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
previewLayer.frame = frame;
});
!
});
非同期で