Факел устройства выключается при запуске AVCaptureSession - PullRequest
0 голосов
/ 06 декабря 2018

Я использую AVCaptureSession для захвата видео.

Я хочу зажечь факел в течение всего сеанса, но как только сеанс начнется, индикатор автоматически выключится.

ТамЗдесь много постов, показывающих, как включить факел.Это работает, если сеанс захвата не запущен .

вот способ, которым я начинаю сеанс

guard let camera = AVCaptureDevice.default(for: .video) else { return }
self.captureSession.beginConfiguration()

let deviceInput = try AVCaptureDeviceInput(device: camera)
self.captureSession.addInput(deviceInput)

let videoOutput = AVCaptureVideoDataOutput()
videoOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "com.axelife.axcapturer.samplebufferdelegate"))
self.captureSession.addOutput(videoOutput)

try camera.setLight(on: true)
self.captureSession.commitConfiguration()

DispatchQueue(label: "capturesession").async {
    self.captureSession.startRunning()
}

И мой код для включения света

extension AVCaptureDevice {
    func setLight(on: Bool) throws {
        try self.lockForConfiguration()
        if on {
            try self.setTorchModeOn(level: 1)
        }
        else {
            self.torchMode = .off
        }
        self.unlockForConfiguration()
    }
}

С этим кодом свет включается в течение <0,5 секунд и автоматически выключается. </p>

1 Ответ

0 голосов
/ 07 декабря 2018

Хорошо, я разобрался.

Факел просто должен зажечь после начала сеанса.

Так что вместо:

try camera.setLight(on: true)
self.captureSession.commitConfiguration()

DispatchQueue(label: "capturesession").async {
    self.captureSession.startRunning()
}

просто сделайте

self.captureSession.commitConfiguration()

DispatchQueue(label: "capturesession").async {
    self.captureSession.startRunning()
    try camera.setLight(on: true)
}
...