在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最终发布时,我在运行代码时收到了以下警告.请注意,我的录像机在大约两周的时间里仍能正常工作.

iOS 10.0中不推荐使用"devices()":请改用AVCaptureDeviceDiscoverySession.

当我今天早上运行代码时,我的录像机停止了工作.xCode8没有给我任何错误,但是用于相机拍摄的预览层是完全白色的.当我开始录制时,我收到以下错误:

Error Domain=AVFoundationErrorDomain Code=-11800"操作无法完成"UserInfo={NSLocalizedDescription=操作无法完成,NSUnderlyingError=0x17554440{Error Domain=NSOSStatusErrorDomain Code=-12780(null)},NSLocalizedFailureReason=发生未知错误(-12780)}

我相信这与我正在使用不推荐的方法AVCaptureDevice.devices()有关.因此,我想知道如何使用AVCaptureDeviceDiscoverySession来代替?

提前感谢您的帮助!

推荐答案

您可以通过以下方式获得前置摄像头:

AVCaptureDevice.default(.builtInWideAngleCamera, for: AVMediaType.video, position: .front)

后置摄像头:

AVCaptureDevice.default(.builtInWideAngleCamera, for: AVMediaType.video, position: .back)

还有麦克风:

AVCaptureDevice.default(.builtInMicrophone, for: AVMediaType.audio, position: .unspecified)

Swift相关问答推荐

如何为SwiftData中的Predicate each Investment类型编写具有where分句的扩展方法?

具有@Published属性的双向数据流动,能够忽略事件

通过withstickedContinuation传递通用类型T

SwiftData/PersistentModel.swft:540:致命错误:不支持的关系密钥路径ReferenceWritableKeyPath

如何在macOS中延迟退出应用程序的退出操作?

如何观察UIViewRepresentable中的多个变化?

如何使用模型在 SwiftUI 的列表中进行搜索

是否可以限制 ExpressibleByIntegerLiteral struct 的初始值?

带有可选字符串作为键路径的 SwiftUI iOS16 表

将弱引用作为类函数引用传递时,弱引用无法按预期工作

swift 是否遇到 Java 的 2gb 最大序列化大小问题?

LeetCode 249. 分组移位字符串

将基于MyProtocol的泛型函数的参数更改为使用存在的any MyProtocol或some MyProtocol是否会受到惩罚?

如何在 Swift 中返回 Task 中定义的变量

符合协议要求委托变量在 ios13 中可用

单元测试和私有变量

Swift 覆盖实例变量

在 Swift 框架中加载资源(例如故事板)

3D touch /强制touch 实现

TabView 在切换选项卡时重置导航堆栈