前幾天開發(fā)一個視頻處理相關的App,發(fā)現(xiàn)一個莫名其妙的問題,代碼檢查了很長時間也沒發(fā)現(xiàn)問題所在,問題描述如下,需求是需要在視頻中檢測人臉,設置AVCaptureVideoDataOutput的metadataObjectType如下:
_output.metadataObjectTypes=@[AVMetadataObjectTypeFace];
但是output.availableMetadataObjectTypes一直返回nil,查詢Api文檔,iPhone6s硬件是支持人臉檢測的,可是availableMetadataObjectTypes一直為nil,Google了一下很多人說是由于隱私權(quán)限的問題,確認權(quán)限已經(jīng)添加,還是為nil。
后來在stackoverflow上有人提了一句,需要在AVCaptureSession startRunning后再設置,試了下,代碼如下:
NSLog(@"%@",[_output availableMetadataObjectTypes]);
[self.session startRunning];
NSLog(@"%@",[_output availableMetadataObjectTypes]);
_output.metadataObjectTypes = [_output availableMetadataObjectTypes];
果然在startRunning之前為nil,后面就有對應的輸出了。
想了一下原因,應該是availableMetadataObjectTypes是需要實時檢測的,需要session啟動后才能進行有效檢測,未啟動之前是無法獲取有效值的。
記錄一下,希望可以幫助到遇見此問題的人,以上!