菜鸟教程小白 发表于 2022-12-12 12:32:23

ios - 在 Swift 3.0 中录制视频时 Flash 不起作用


                                            <p><p>我正在开发相机应用程序。我使用了一个按钮来在需要时打开和关闭闪光灯模式。此方法非常适用于捕获静止图像,不适用于视频模式。下面是我的代码,请帮忙。 TIA</p>

<pre><code>class func setFlashMode(_ flashMode: AVCaptureFlashMode, for device: AVCaptureDevice) {
    if device.hasFlash &amp;&amp; device.isFlashModeSupported(flashMode) {
      do {
            try device.lockForConfiguration()
            device.flashMode = flashMode
            device.unlockForConfiguration()
      }
      catch
      {
            print(&#34;Error:-\(error)&#34;)
      }
    }
}
</code></pre>

<blockquote>
<p>Flash Button Action </p>
</blockquote>

<pre><code>@IBAction func flashButtonClicked(_ sender: UIButton)
{
sender.isSelected = !sender.isSelected
    if !(sender.isSelected)
    {
      sender.setTitle(NSLocalizedString(&#34;OFF&#34;, comment: &#34;&#34;), for: UIControlState.normal)
      CameraVC.setFlashMode(AVCaptureFlashMode.off, for: self.videoDeviceInput.device)
    }
    else
    {
      sender.setTitle(NSLocalizedString(&#34;ON&#34;, comment: &#34;&#34;), for: UIControlState.normal)
      CameraVC.setFlashMode(AVCaptureFlashMode.on, for: self.videoDeviceInput.device)
    }
}
</code></pre>

<blockquote>
<p>Video Button Action</p>
</blockquote>

<pre><code>@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 = &#34;\(mediaDirectoryURL.path)/\(fileName).mov&#34;
            self.movieFileOutput.startRecording(toOutputFileURL: URL(fileURLWithPath: outputFilePath), recordingDelegate: self)
            print(&#34;\(outputFilePath)&#34;)
      }
      else
      {
            self.movieFileOutput.stopRecording()
      }
      sender.isEnabled = true
    }
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>使用了手电筒模式,效果很好。</p>

<pre><code>class func setTorchMode(_ torchMode: AVCaptureTorchMode, for device: AVCaptureDevice) {
    if device.isTorchModeSupported(torchMode) &amp;&amp; device.torchMode != torchMode {
      do
      {
            try device.lockForConfiguration()
                device.torchMode = torchMode
                device.unlockForConfiguration()
      }
      catch {
            print(&#34;Error:-\(error)&#34;)
      }
    }
}
</code></pre>

<p>并将其用作</p>

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

<p>isTorchOn 是一个 bool 值</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 Swift 3.0 中录制视频时 Flash 不起作用,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/41115108/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/41115108/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 Swift 3.0 中录制视频时 Flash 不起作用