使用Swift 3.0录制视频时闪光灯不起作用

问题描述:

我正在使用相机应用程序。我需要时使用一个按钮来设置和关闭闪光模式。此方法完美适用于捕获静止图像,并且不适用于视频模式。以下是我的代码请帮助。 TIA使用Swift 3.0录制视频时闪光灯不起作用

class func setFlashMode(_ flashMode: AVCaptureFlashMode, for device: AVCaptureDevice) { 
    if device.hasFlash && device.isFlashModeSupported(flashMode) { 
     do { 
      try device.lockForConfiguration() 
      device.flashMode = flashMode 
      device.unlockForConfiguration() 
     } 
     catch 
     { 
      print("Error:-\(error)") 
     } 
    } 
} 

Flash按钮操作

@IBAction func flashButtonClicked(_ sender: UIButton) 
{ 
sender.isSelected = !sender.isSelected 
    if !(sender.isSelected) 
    { 
     sender.setTitle(NSLocalizedString("OFF", comment: ""), for: UIControlState.normal) 
     CameraVC.setFlashMode(AVCaptureFlashMode.off, for: self.videoDeviceInput.device) 
    } 
    else 
    { 
     sender.setTitle(NSLocalizedString("ON", comment: ""), for: UIControlState.normal) 
     CameraVC.setFlashMode(AVCaptureFlashMode.on, for: self.videoDeviceInput.device) 
    } 
} 

视频按钮操作

@IBAction func videoButtonClicked(_ sender: UIButton) 
{  
    self.sessionQueue.async { 
     if !self.movieFileOutput.isRecording 
     { 
      if UIDevice.current.isMultitaskingSupported 
      { 
       self.backGroundRecordingID = UIApplication.shared.beginBackgroundTask(expirationHandler: nil) 
      } 

      let connection = self.movieFileOutput.connection(withMediaType: AVMediaTypeVideo) 
      let deviceOrientation = UIDevice.current.orientation 
      if UIDeviceOrientationIsPortrait(deviceOrientation) || UIDeviceOrientationIsLandscape(deviceOrientation) 
      { 
       connection?.videoOrientation = self.videoOrientation() 
      } 

      // Turning ON flash for video recording 
      CameraVC.setFlashMode(AVCaptureFlashMode.on, for: self.videoDeviceInput.device) 

      let mediaDirectoryURL = SBMediaInfo.mediaDirectoryPath() 
      //Unique file name 
      let fileName = UIDevice.current.identifierForVendor!.uuidString 
      // Start recording to a temporary file. 
      let outputFilePath = "\(mediaDirectoryURL.path)/\(fileName).mov" 
      self.movieFileOutput.startRecording(toOutputFileURL: URL(fileURLWithPath: outputFilePath), recordingDelegate: self) 
      print("\(outputFilePath)") 
     } 
     else 
     { 
      self.movieFileOutput.stopRecording() 
     } 
     sender.isEnabled = true 
    } 
} 

用于火炬模式,它完美地工作。

class func setTorchMode(_ torchMode: AVCaptureTorchMode, for device: AVCaptureDevice) { 
    if device.isTorchModeSupported(torchMode) && device.torchMode != torchMode { 
     do 
     { 
      try device.lockForConfiguration() 
       device.torchMode = torchMode 
       device.unlockForConfiguration() 
     } 
     catch { 
      print("Error:-\(error)") 
     } 
    } 
} 

,并以此作为

if self.isTorchOn == true 
      { 
       CameraVC.setTorchMode(AVCaptureTorchMode.on, for: self.videoDeviceInput.device) 
      } 
      else 
      { 
       CameraVC.setTorchMode(AVCaptureTorchMode.off, for: self.videoDeviceInput.device) 
      } 

其中isTorchOn是一个布尔值