Включите фонарик / фонарик и камеру одновременно на iPhone X - PullRequest
0 голосов
/ 12 июня 2018

Есть ли способ оставить фонарик включенным, пока AVCaptureSession работает в режиме видео на iPhone X?

У меня есть код Swift 4, который включает фонарик и начинает получать видеокадры с камеры,Я знаю, что это работает для iPhone 4,5 и 6. Но с iPhone X фонарик не включается, когда я начинаю сеанс захвата.

session = AVCaptureSession()
if self.session.canSetSessionPreset(AVCaptureSession.Preset.inputPriority) {
    self.session.sessionPreset = .inputPriority
}
//This is the wide angle camera device
camera = AVCaptureDevice.default(for: AVMediaType.video)
//I could also use telephoto, same problem
//camera = AVCaptureDevice.default(.builtInTelephotoCamera, for: AVMediaType.video, position: .unspecified)
if camera == nil {
    return
}
if self.camera.isTorchModeSupported(.on) {
    camera.activeFormat = selectBestFormat(camera.formats)
    camera.torchMode = .on
    try? camera.setTorchModeOn(level: 1.0)
    camera.unlockForConfiguration()
}

let cameraInput = try! AVCaptureDeviceInput(device: self.camera)


let videoOutput = AVCaptureVideoDataOutput()
let captureQueue = DispatchQueue(label: "captureQueue")
videoOutput.setSampleBufferDelegate(self, queue: captureQueue)
videoOutput.videoSettings = [
    (kCVPixelBufferPixelFormatTypeKey as AnyObject) as! AnyHashable as! String : Int(kCVPixelFormatType_32BGRA)
]

self.session.addInput(cameraInput)
self.session.addOutput(videoOutput)
//If I don't start the session the torch is on 
self.session.startRunning()

Этот вопрос имеет тот жепроблема.Проблема в моем случае заключается в том, что фонарик выключается, как только начинается AVCaptureSession.

Я попытался включить фонарик после начала сеанса, я попробовал несколько различных конфигураций камеры.Я также попытался использовать два разных объектива камеры.Для всех этих конфигураций индикатор гаснет.

Если решения не найдено, пожалуйста, дайте мне знать, если для этого есть ошибка.Или я войду один.

1 Ответ

0 голосов
/ 12 июня 2018

была такая же проблема.Кажется, это ошибка в iOS 11 / iPhone X

Я нашел обходной путь ... не очень элегантно, но работает; -)

    if let device = captureDevice {
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
            self.setTorchLevel(device: device, to: 0)
        }
        DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
            self.setTorchLevel(device: device, to: 1)
        }
    }

Даже на iPhone "Есть ли у васпытался выключить и снова включить "работает

...