AVCaptureDevice от приложения Snapchat Desktop Не выбрасывает видео канал - PullRequest
0 голосов
/ 27 октября 2018

Snapchat только что выпустил настольное приложение ( ссылка ), которое предназначено для создания в системе видеоустройства, которое будет использоваться любым видеоприложением, таким как Skype, Google Hangouts, Apple Photobooth и даже OBS для прямой трансляции. , Он отлично работает в других приложениях, поскольку они, кажется, обнаруживают устройство с привязкой камеры вместе с «FaceTime HD Camera».

Итак, я попытался создать приложение OSX, используя Xcode. Надеюсь, я смогу получить видео-канал. Я использую следующий пример кода, который я взял из этого github: AcceCamera Demo

Приложение прекрасно работает при отображении канала с «FacetimeHD Camera», но не работает (так как в нем ничего не отображается) при выборе устройства SnapCam.

вот код (вы также можете использовать ссылку выше, единственное отличие от этой - выбор устройства SnapCam):

import Cocoa
import AVFoundation

class ViewController: NSViewController {

    @IBOutlet weak var camera: NSView!

    let captureSession = AVCaptureSession()
    var captureDevice : AVCaptureDevice?
    var previewLayer : AVCaptureVideoPreviewLayer?

    override func viewDidLoad() {
        super.viewDidLoad()

        camera.layer = CALayer()


        // Do any additional setup after loading the view, typically from a nib.
        captureSession.sessionPreset = AVCaptureSessionPresetLow

        // Get all audio and video devices on this machine
        let devices = AVCaptureDevice.devices()

        // Find the FaceTime HD camera object
        for device in devices! {
//            print(device)

            // Camera object found and assign it to captureDevice
            if ((device as AnyObject).hasMediaType(AVMediaTypeVideo)) {
                print(device)
                let d = device as? AVCaptureDevice
                print("\(d?.manufacturer)")
                if(d?.manufacturer == "SnapVendor"){
                    captureDevice = device as? AVCaptureDevice
                    break;
                }

            }
        }


        if captureDevice != nil {

            do {

                try captureSession.addInput(AVCaptureDeviceInput(device: captureDevice))
                previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
                previewLayer?.frame = (self.camera.layer?.frame)!

                // Add previewLayer into custom view
                self.camera.layer?.addSublayer(previewLayer!)

                // Start camera
                captureSession.startRunning()

            } catch {
                print(AVCaptureSessionErrorKey.description)
            }
        }


    }

    override var representedObject: Any? {
        didSet {
            // Update the view, if already loaded.
        }
    }


}

Мне очень странно, что другие приложения, такие как OBS, не имеют проблем с получением канала.

...