How to get front camera, back camera and audio with AVCaptureDeviceDiscoverySession

后端 未结 11 1384
闹比i
闹比i 2020-12-12 20:58

Before iOS 10 came out I was using the following code to get the video and audio capture for my video recorder:

 for device in AVCaptureDevice.devices()
 {
          


        
相关标签:
11条回答
  • 2020-12-12 21:06

    For my video capture app I'm using the following code to get the mic, front and rear camera and I've tested this code from iOS 7 to 10.0.2.

            var frontCamera : AVCaptureDevice?
            var rearCamera : AVCaptureDevice?
    
            captureSession = AVCaptureSession()
    
            let devices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo)
    
            let audioDevices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeAudio)
    
            for mic in audioDevices {
                audioDevice = mic as? AVCaptureDevice
                audioCapturePossible = true
            }
    
            for device in devices {
                if device.position == AVCaptureDevicePosition.Front {
                    frontCamera = device as? AVCaptureDevice
                    hasFrontCamera = true
                }
                else if device.position == AVCaptureDevicePosition.Back {
                    rearCamera = device as? AVCaptureDevice
                    hasRearCamera = true
                }
    
            }
    
    0 讨论(0)
  • 2020-12-12 21:08

    Swift 4 (xCode 10.1)

    This is what worked for me in the latest version of Swift. I did not see this answer, and it took me a while to suss out so here is how to get the front facing camera.

     if let device = AVCaptureDevice.defaultDevice(withDeviceType: .builtInWideAngleCamera , mediaType: AVMediaTypeVideo, position: .front)  {
        //Do the camera thing here..
    }
    
    0 讨论(0)
  • 2020-12-12 21:09

    Here's my code (Swift 3) to get camera position :

    // 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
    }
    

    If you want, you can also get the new devicesTypes from iPhone 7+ (dual camera) by changing the deviceTypes array.

    Here's a good read : https://forums.developer.apple.com/thread/63347

    0 讨论(0)
  • 2020-12-12 21:10

    It works on Xcode 9.2 and Swift 4

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

    https://developer.apple.com/documentation/avfoundation/avcapturedevice/2361508-default

    0 讨论(0)
  • 2020-12-12 21:13

    Swift 3

    For selecting the back camera:(also you can change .back as needed)

    For selecting another deviceType simple add it inside the [ ] (i.e:

    [deviceTypeCamera, AVCaptureDeviceType.builtInMicrophone]

    (or create a private let... like I did in the code with the back camera)

     private let position = AVCaptureDevicePosition.back
     private let deviceTypeBackCamera = AVCaptureDeviceType.builtInWideAngleCamera
    
     private func selectCaptureDevice() -> AVCaptureDevice? {
        return AVCaptureDeviceDiscoverySession(deviceTypes: [deviceTypeBackCamera], mediaType: AVMediaTypeVideo, position: position).devices.first
    
     }
    
    0 讨论(0)
  • 2020-12-12 21:13

    Try below code to get camera ID:

    NSString *cameraID = nil;
    
    NSArray *captureDeviceType = @[AVCaptureDeviceTypeBuiltInWideAngleCamera];
    AVCaptureDeviceDiscoverySession *captureDevice = 
                  [AVCaptureDeviceDiscoverySession 
                    discoverySessionWithDeviceTypes:captureDeviceType 
                    mediaType:AVMediaTypeVideo 
                    position:AVCaptureDevicePositionUnspecified];
    
    cameraID = [captureDevice.devices.lastObject localizedName];
    
    0 讨论(0)
提交回复
热议问题