第二十五篇玩转【斗鱼直播APP】之切换镜头&聚焦&写入文件

切换镜头&聚焦&写入文件

切换镜头(前置&后置摄像头)

  • 切换步骤

    • 给切换过程添加动画
    • 获取当前摄像头是前置还是后置
    • 取出相反的摄像头(之前是前置,这次取出后置)
    • 通过新摄像头重新获取设备(AVCaptureDevice)
    • 通过设备(AVCaptureDevice)创建新的输入(AVCaptureDeviceInput)
    • 移除旧input&添加新的input
      • 注意:修改session配置之前先调用开启修改配置选项,配置完成后,调用提交修改配置选项
      • session?.beginConfiguration()
      • session?.commitConfiguration()
    • 保存新的input
  • 图例解析:

  • 代码如下:
 
 
  1. @IBAction func switchScene() {
  2. // 0.执行动画
  3. let rotaionAnim = CATransition()
  4. rotaionAnim.type = "oglFlip"
  5. rotaionAnim.subtype = "fromLeft"
  6. rotaionAnim.duration = 0.5
  7. view.layer.add(rotaionAnim, forKey: nil)
  8. // 1.校验videoInput是否有值
  9. guard let videoInput = videoInput else { return }
  10. // 2.获取当前镜头
  11. let position : AVCaptureDevicePosition = videoInput.device.position == .front ? .back : .front
  12. // 3.创建新的input
  13. guard let devices = AVCaptureDevice.devices(withMediaType: AVMediaTypeVideo) as? [AVCaptureDevice] else { return }
  14. guard let newDevice = devices.filter({$0.position == position}).first else { return }
  15. guard let newVideoInput = try? AVCaptureDeviceInput(device: newDevice) else { return }
  16. // 4.移除旧输入,添加新输入
  17. session?.beginConfiguration()
  18. session?.removeInput(videoInput)
  19. session?.addInput(newVideoInput)
  20. session?.commitConfiguration()
  21. // 5.保存新输入
  22. self.videoInput = newVideoInput
  23. }

写入文件

  • 写入文件步骤
    • 创建AVCaptureMovieFileOutput对象
      • 用于将音频视频写入文件
    • 将movieFileOutput对象,添加到session的输出中
      • 写入文件也是一种输出
    • 设置视频的稳定模式
      • 不设置可能会出现视频跳帧等问题
      • 通常设置为自动即可
    • 开始写入
    • 录制完成,停止写入即可
  • 代码解析
  • 代码如下:
  • 创建、添加、设置代码
 
 
  1. // 添加文件输出
  2. let movieFileoutput = AVCaptureMovieFileOutput()
  3. self.movieFileOutput = movieFileoutput
  4. session.addOutput(movieFileoutput)
  5. // 获取视频的connection
  6. let connection = movieFileoutput.connection(withMediaType: AVMediaTypeVideo)
  7. // 设置视频的稳定模式
  8. connection?.preferredVideoStabilizationMode = .auto
  9. // 开始写入视频
  10. movieFileoutput.startRecording(toOutputFileURL: outputFileURL, recordingDelegate: self)
  • 停止写入代码
 
 
  1. // 0.停止写入
  2. self.movieFileOutput?.stopRecording()
  • 在代理方法中监听开始、结束事件
 
 
  1. extension ViewController : AVCaptureFileOutputRecordingDelegate {
  2. func capture(_ captureOutput: AVCaptureFileOutput!, didStartRecordingToOutputFileAt fileURL: URL!, fromConnections connections: [Any]!) {
  3. print("开始录制")
  4. }
  5. func capture(_ captureOutput: AVCaptureFileOutput!, didFinishRecordingToOutputFileAt outputFileURL: URL!, fromConnections connections: [Any]!, error: Error!) {
  6. print("停止录制")
  7. }
  8. }
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值