ios - 在 Swift 3.0 中录制视频时 Flash 不起作用
<p><p>我正在开发相机应用程序。我使用了一个按钮来在需要时打开和关闭闪光灯模式。此方法非常适用于捕获静止图像,不适用于视频模式。下面是我的代码,请帮忙。 TIA</p>
<pre><code>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)")
}
}
}
</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("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)
}
}
</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 = "\(mediaDirectoryURL.path)/\(fileName).mov"
self.movieFileOutput.startRecording(toOutputFileURL: URL(fileURLWithPath: outputFilePath), recordingDelegate: self)
print("\(outputFilePath)")
}
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) && device.torchMode != torchMode {
do
{
try device.lockForConfiguration()
device.torchMode = torchMode
device.unlockForConfiguration()
}
catch {
print("Error:-\(error)")
}
}
}
</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]