第二十五篇玩转【斗鱼直播APP】之切换镜头&聚焦&写入文件
2016-10-24 09:34
337 查看
切换镜头&聚焦&写入文件
切换镜头(前置&后置摄像头)
切换步骤给切换过程添加动画
获取当前摄像头是前置还是后置
取出相反的摄像头(之前是前置,这次取出后置)
通过新摄像头重新获取设备(AVCaptureDevice)
通过设备(AVCaptureDevice)创建新的输入(AVCaptureDeviceInput)
移除旧input&添加新的input
注意:修改session配置之前先调用开启修改配置选项,配置完成后,调用提交修改配置选项
session?.beginConfiguration()
session?.commitConfiguration()
保存新的input
图例解析:
代码如下:
@IBAction func switchScene() {
// 0.执行动画
let rotaionAnim = CATransition()
rotaionAnim.type = "oglFlip"
rotaionAnim.subtype = "fromLeft"
rotaionAnim.duration = 0.5
view.layer.add(rotaionAnim, forKey: nil)
// 1.校验videoInput是否有值
guard let videoInput = videoInput else { return }
// 2.获取当前镜头
let position : AVCaptureDevicePosition = videoInput.device.position == .front ? .back : .front
// 3.创建新的input
guard let devices = AVCaptureDevice.devices(withMediaType: AVMediaTypeVideo) as? [AVCaptureDevice] else { return }
guard let newDevice = devices.filter({$0.position == position}).first else { return }
guard let newVideoInput = try? AVCaptureDeviceInput(device: newDevice) else { return }
// 4.移除旧输入,添加新输入
session?.beginConfiguration()
session?.removeInput(videoInput)
session?.addInput(newVideoInput)
session?.commitConfiguration()
// 5.保存新输入
self.videoInput = newVideoInput
}
写入文件
写入文件步骤创建AVCaptureMovieFileOutput对象
用于将音频视频写入文件
将movieFileOutput对象,添加到session的输出中
写入文件也是一种输出
设置视频的稳定模式
不设置可能会出现视频跳帧等问题
通常设置为自动即可
开始写入
录制完成,停止写入即可
代码解析
代码如下:
创建、添加、设置代码
// 添加文件输出
let movieFileoutput = AVCaptureMovieFileOutput()
self.movieFileOutput = movieFileoutput
session.addOutput(movieFileoutput)
// 获取视频的connection
let connection = movieFileoutput.connection(withMediaType: AVMediaTypeVideo)
// 设置视频的稳定模式
connection?.preferredVideoStabilizationMode = .auto
// 开始写入视频
movieFileoutput.startRecording(toOutputFileURL: outputFileURL, recordingDelegate: self)
停止写入代码
// 0.停止写入
self.movieFileOutput?.stopRecording()
在代理方法中监听开始、结束事件
extension ViewController : AVCaptureFileOutputRecordingDelegate {
func capture(_ captureOutput: AVCaptureFileOutput!, didStartRecordingToOutputFileAt fileURL: URL!, fromConnections connections: [Any]!) {
print("开始录制")
}
func capture(_ captureOutput: AVCaptureFileOutput!, didFinishRecordingToOutputFileAt outputFileURL: URL!, fromConnections connections: [Any]!, error: Error!) {
print("停止录制")
}
}
相关文章推荐
- 玩转【斗鱼直播APP】之切换镜头&聚焦&写入文件
- 玩转【斗鱼直播APP】系列之获取APP图片资源
- 玩转【斗鱼直播APP】系列之布局推荐界面
- 第二十三篇玩转【斗鱼直播APP】系列之直播总体概览
- 小码哥-玩转【斗鱼直播APP】系列之布局推荐界面
- 小码哥-玩转【斗鱼直播APP】系列之框架搭建
- 玩转【斗鱼直播APP】系列之项目基本设置
- 第十八篇玩转【斗鱼直播APP】系列之娱乐菜单展示
- 第二十四篇玩转【斗鱼直播APP】系列之采集视频
- 第二十篇玩转【斗鱼直播APP】系列之“趣玩”界面展示
- 小码哥-玩转【斗鱼直播APP】系列之获取APP图片资源
- 玩转【斗鱼直播APP】系列之首页导航栏设置
- 玩转【斗鱼直播APP】系列之请求展示推荐数据
- 小码哥-玩转【斗鱼直播APP】系列之界面分析
- 玩转【斗鱼直播APP】系列之界面分析
- 玩转【斗鱼直播APP】系列之首页布局分析实现
- 玩转【斗鱼直播APP】系列之游戏推荐展示
- 玩转【斗鱼直播APP】系列之游戏界面实现
- 小码哥-玩转【斗鱼直播APP】系列之项目基本设置
- 小码哥-玩转【斗鱼直播APP】系列之项目部署