• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-12 12:32:23 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

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 Button Action

@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)
    }
}

Video Button Action

@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
    }
}



Best Answer-推荐答案


使用了手电筒模式,效果很好。

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 是一个 bool 值

关于ios - 在 Swift 3.0 中录制视频时 Flash 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41115108/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap