前几天开发一个视频处理相关的App,发现一个莫名其妙的问题,代码检查了很长时间也没发现问题所在,问题描述如下,需求是需要在视频中检测人脸,设置AVCaptureVideoDataOutput的metadataObjectType如下:
_output.metadataObjectTypes=@[AVMetadataObjectTypeFace];
但是output.availableMetadataObjectTypes一直返回nil,查询Api文档,iPhone6s硬件是支持人脸检测的,可是availableMetadataObjectTypes一直为nil,Google了一下很多人说是由于隐私权限的问题,确认权限已经添加,还是为nil。
后来在stackoverflow上有人提了一句,需要在AVCaptureSession startRunning后再设置,试了下,代码如下:
NSLog(@"%@",[_output availableMetadataObjectTypes]);
[self.session startRunning];
NSLog(@"%@",[_output availableMetadataObjectTypes]);
_output.metadataObjectTypes = [_output availableMetadataObjectTypes];
果然在startRunning之前为nil,后面就有对应的输出了。
想了一下原因,应该是availableMetadataObjectTypes是需要实时检测的,需要session启动后才能进行有效检测,未启动之前是无法获取有效值的。
记录一下,希望可以帮助到遇见此问题的人,以上!