在iOS 10推出之前,我使用以下代码为我的录像机获取视频和音频捕获:
for device in AVCaptureDevice.devices()
{
if (device as AnyObject).hasMediaType( AVMediaTypeAudio )
{
self.audioCapture = device as? AVCaptureDevice
}
else if (device as AnyObject).hasMediaType( AVMediaTypeVideo )
{
if (device as AnyObject).position == AVCaptureDevicePosition.back
{
self.backCameraVideoCapture = device as? AVCaptureDevice
}
else
{
self.frontCameraVideoCapture = device as? AVCaptureDevice
}
}
}
当iOS 10最终发布时,我在运行代码时收到了以下警告。请注意,我的录像机仍然顺利地工作了大约两个星期。
'devices()‘在iOS 10.0中已弃用:请改用AVCaptureDeviceDiscoverySession。
当我今天早上运行我的代码时,我的录像机停止工作了。xCode8没有给我任何错误,但相机捕捉的previewLayer是完全白色的。然后,当我开始录制时,我收到以下错误:
错误Domain=AVFoundationErrorDomain代码=-11800“操作无法完成”UserInfo={NSLocalizedDescription=The操作无法完成,NSUnderlyingError=0x17554440 {错误Domain=NSOSStatusErrorDomain代码=-12780 "(null)"},出现NSLocalizedFailureReason=An未知错误(-12780)}
我相信这与我使用过时的方法AVCaptureDevice.devices()
有关。因此,我想知道如何使用AVCaptureDeviceDiscoverySession
来代替?
提前感谢您的帮助!
发布于 2016-10-06 19:43:08
您可以通过以下方式获取前置摄像头:
AVCaptureDevice.default(.builtInWideAngleCamera, for: AVMediaType.video, position: .front)
后置摄像头:
AVCaptureDevice.default(.builtInWideAngleCamera, for: AVMediaType.video, position: .back)
还有麦克风:
AVCaptureDevice.default(.builtInMicrophone, for: AVMediaType.audio, position: .unspecified)
发布于 2017-02-11 03:15:25
下面是我获取摄像头位置的代码(Swift 3):
// Find a camera with the specified AVCaptureDevicePosition, returning nil if one is not found
func cameraWithPosition(_ position: AVCaptureDevicePosition) -> AVCaptureDevice?
{
if let deviceDescoverySession = AVCaptureDeviceDiscoverySession.init(deviceTypes: [AVCaptureDeviceType.builtInWideAngleCamera],
mediaType: AVMediaTypeVideo,
position: AVCaptureDevicePosition.unspecified) {
for device in deviceDescoverySession.devices {
if device.position == position {
return device
}
}
}
return nil
}
如果需要,您还可以通过更改devicesTypes阵列从iPhone 7+ (双摄像头)获得新的deviceTypes。
发布于 2017-08-03 13:07:20
Swift 4、iOS 10+和Xcode 10.1取代
if let cameraID = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .front)?.localizedName {
//cameraID = "Front Camera"
}
使用AVCaptureDevice.DiscoverySession实现
if let cameraID = AVCaptureDevice.DiscoverySession.init(deviceTypes: [AVCaptureDevice.DeviceType.builtInWideAngleCamera], mediaType: .video, position: .front).devices.first?.localizedName{
//cameraID = "Front Camera"
}
需要用#available(iOS 10,*) check对其进行包装。
https://stackoverflow.com/questions/39894630
复制相似问题