AVFoundation自定义相机问题及RosyWriter的使用
来源:互联网 发布:商家入驻系统源码 编辑:程序博客网 时间:2024/05/26 19:14
1.‘实时视频流AVCaptureVideoDataOutput’和‘系统视频录制功能AVCaptureMovieFileOutput’冲突。
1.1 AVFoundation配置阶段
具体为在配置addOutput阶段,不能同时配置AVCaptureVideoDataOutput和AVCaptureMovieFileOutput。
二者无法同时启用。如果两者同时配置,可以实现‘系统视频录制功能’但是却不再输出‘实时视频流’。
如果要同时实现‘视频录制’和‘实时视频流’,可以使用AVCaptureVideoDataOutput代理的sampleBuffer作为数据源,
然后使用AVAssetWriter来做视频音频编码以及写入本地文件,这样就同时实现了‘视频录制’和‘实时视频流’。
具体使用可以阅读苹果官方文档RosyWriter并下载项目代码。
1.2 RosyWriter的使用
RosyWriter代码可以分为三部分:Renderer(渲染)、OpenGLPixelBufferView(渲染结果显示)、MovieRecorder(存储)
1.2.1 Renderer(渲染)
渲染使用的方式有4种,分别是:OpenGL、CPU、OpenCV、CIFilter,默认使用的是OpenGL,可以选择擅长的方式。
当启动RosyWriter的时候,发现视频预览颜色是紫色,原因是着色器(shader)里将green设置为0了,修改方法是
找到Shaders文件夹里的myFilter.fsh片段着色器文件,将下面代码拷贝替换,实际是将green改回正常值
gl_FragColor.bgra = vec4(color.b, color.g, color.r, color.a);
1.2.2 OpenGLPixelBufferView(渲染结果显示)
渲染结果显示使用的是OpenGL,研读代码,可以了解到OpenGL是怎样将pixelBuffer加载到自定义layer的。
1.2.3 MovieRecorder(存储)
如果只是需要实现’实时视频流保存视频功能‘,只将MovieRecorder代码拖到项目即可,具体使用可以参考
RosyWriterCapturePipeline的startRecording函数
1.3相关链接
iOS AVCaptureVideoDataOutputSampleBufferDelegate 录制视频
RosyWriter官方文档及demo
2.预设分辨率过高导致录制视频时crash:No active/enabled connections
控制台输出:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[AVCaptureMovieFileOutput startRecordingToOutputFileURL:recordingDelegate:] No active/enabled connections'
问题原因:录制视频支持的分辨率与拍照的分辨率不是完全等价,即适用于拍照的分辨率不一定适合拍照。所以,如果
设置了一个高分辨率的预设值,就会导致上面的问题。
解决方法:简单粗暴的方式就是,拍照前设置预设分辨率为较高的值,录制视频前设置预设分辨率为相应支持的值。
比如视频一般使用预设值为:AVCaptureSessionPreset640x480
如果是图片可以设置更高的,比如:AVCaptureSessionPreset1280x720,或者用AVCaptureSessionPresetPhoto
1 0
- AVFoundation自定义相机问题及RosyWriter的使用
- iOS-AVFoundation自定义相机的一点积累
- AVFoundation自定义相机
- AVFoundation自定义相机
- iOS开发--AVFoundation自定义相机
- iOS-AVFoundation自定义相机详解
- iOS开发--AVFoundation自定义相机
- 使用AVFoundation进行相机捕捉
- IOS 自定义相机, 使用 AVFoundation(附实现部分腾讯水印相机功能 demo)
- [绍棠] iOS开发--AVFoundation自定义相机
- iOS-----AVFoundation框架的功能详解 相机自定义拍照和录制视频
- 自定义相机遇到的问题
- AVFoundation的使用
- AVFoundation的使用
- AVFoundation的使用
- AVFoundation/AVCaptureSession实现自定义相机界面拍照(四)
- AVFoundation/AVCaptureSession实现自定义相机界面录像(三)
- iOS 上的相机捕捉 UIImagePickerController 与 AVFoundation的区别
- 【装机】关于WINRE/ESP/LRS_ESP/MSR/PBR这些分区
- InnoDB与Myisam的六大区别
- caffe初探3:结合数据集与设计的网络模型进行训练
- Android Volley完全解析(一),初识Volley的基本用法
- oracle 密码的加密和解密
- AVFoundation自定义相机问题及RosyWriter的使用
- struts2的视图层和控制层之间的通信(数据传递)方式。
- 计算机顶级会议Rankings && 英文投稿的一点经验
- Android热修复之微信Tinker使用初探
- pyschools_Count Pages In A Book
- 自定义可以设置drawable大小的TextView
- Android 发布项目到jcenter
- 大话动态内存(一)
- sql-server2008设置定时备份数据库