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

本文介绍如何在iOS应用中实现前后置摄像头的平滑切换,并提供了详细的代码示例。此外,还介绍了如何利用AVFoundation框架进行视频录制及注意事项。

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

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

  • 切换步骤

    • 给切换过程添加动画
    • 获取当前摄像头是前置还是后置
    • 取出相反的摄像头(之前是前置,这次取出后置)
    • 通过新摄像头重新获取设备(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. }
【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器模拟器的研究展开,重点介绍了基于Matlab的建模与仿真方法。通过对四轴飞行器的动力学特性进行分析,构建了非线性状态空间模型,并实现了姿态与位置的动态模拟。研究涵盖了飞行器运动方程的建立、控制系统设计及数值仿真验证等环节,突出非线性系统的精确建模与仿真优势,有助于深入理解飞行器在复杂工况下的行为特征。此外,文中还提到了多种配套技术如PID控制、状态估计与路径规划等,展示了Matlab在航空航天仿真中的综合应用能力。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及从事无人机系统开发的工程技术人员,尤其适合研究生及以上层次的研究者。; 使用场景及目标:①用于四轴飞行器控制系统的设计与验证,支持算法快速原型开发;②作为教学工具帮助理解非线性动力学系统建模与仿真过程;③支撑科研项目中对飞行器姿态控制、轨迹跟踪等问题的深入研究; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注动力学建模与控制模块的实现细节,同时可延伸学习文档中提及的PID控制、状态估计等相关技术内容,以全面提升系统仿真与分析能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值