本文对之前做过的相机模块做个小结,包括自定义相机进行视频拍摄,视频处理及保存等,感兴趣的朋友可以做个参考
创新互联建站主要从事成都网站建设、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务二道,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
常用于媒体录制、编辑、播放,音频录制和播放,视频音频解码等
常用类:AVCaptureDevice、 AVCaptureDeviceInput、 AVCapturePhotoOutput、 AVCaptureVideoPreviewLayer、
AVAsset、 AVAssetReader、 AVAssetWriter、 CMSampleBuffer、 AVPlayer、 CMTime、 AVCaptureMovieFileOutput、 AVCaptureMetadataOutput等
1.判断有无权限
如果未申请过权限,则进行权限获取
Capture 系统体系结构主要部分是会话,输入和输出
Capture 会话将一个或多个输入连接到一个或多个
输出。输入是媒体的来源,包括捕获设备相机和麦克风。输出是从输入中获取媒体数据,例如写入磁盘文件并产生一个电影文件。
视频录制需要在沙盒中先生成一个路径,用于存储视频录制过程中的文件信息写入,等视频资料全部写入完成后,即可获取到完整的视频
2.1 获取存储路径 存储路径在沙盒中,需要唯一
2.2 开启异步线程进行写入配置
2.3. 生成视频采集对象
2.4. 生成图像采集对象并添加到视频采集对象 可以对图像及音频采集对象进行设置,格式,尺寸,码率、帧率、频道等等
2.5. 生成音频采集对象并添加到视频采集对象
上面的写法会在获取到视频信息的时候开始写入录制,避免出现先写入语音信息,导致开始的时候有语音但是没有视频信息问题出现 (实测此问题不明显,根据个人需要看是否添加)
startSessionAtSourceTime方法用于设置开始播放时间
AVCaptureMovieFileOutput方式提供了暂停录制方法和恢复录制方法,但是仅mac os可用
AVAssetWriter不支持暂停录制,尝试过暂停文件写入,结果为空白段,且音频时间顺序混乱, 状态枚举无暂停状态,不支持
相同点:数据采集都在AVCaptureSession中进行,视频和音频的输入都一样,画面的预览一致。
不同点:
录制完成之后可以通过之前的路径来获取视频文件,进行播放、保存等操作
保存
参考相机拍照属性设置
使用UIImagePickerController来实现在项目中添加视频和图片的功能。
+ (BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType
指定的源类型是否可用,sourceType是枚举类型:
UIImagePickerControllerSourceTypePhotoLibrary:照片库
UIImagePickerControllerSourceTypeCamera:摄像头
UIImagePickerControllerSourceTypeSavedPhotosAlbum:相簿
+ (NSArray *)availableMediaTypesForSourceType:(UIImagePickerControllerSourceType)sourceType
指定的源设备上可用的媒体类型,一般就是图片和视频
+ (BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType;
指定来源是否支持:
UIImagePickerControllerSourceTypePhotoLibrary:来自图库
UIImagePickerControllerSourceTypeCamera:来自相机
UIImagePickerControllerSourceTypeSavedPhotosAlbum:来自相册
+ (BOOL)isCameraDeviceAvailable:(UIImagePickerControllerCameraDevice)cameraDevice
指定的摄像头是否可用,cameraDevice是枚举类型:
UIImagePickerControllerCameraDeviceRear:前置摄像头
UIImagePickerControllerCameraDeviceFront:后置摄像头
+ (BOOL)isFlashAvailableForCameraDevice:(UIImagePickerControllerCameraDevice)cameraDevice
指定摄像头的闪光灯是否可用
+ (NSArray *)availableCaptureModesForCameraDevice:(UIImagePickerControllerCameraDevice)cameraDevice
获得指定摄像头上的可用捕获模式,捕获模式是枚举类型:
UIImagePickerControllerCameraCaptureModePhoto:拍照模式
UIImagePickerControllerCameraCaptureModeVideo:视频录制模式
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
代理 - 拍摄或录制完成 这里获取图片或视频信息
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
代理 - 用户取消拍摄
UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo)
保存图片到本地�相册
UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(NSString *videoPath)
能否将视频保存到相簿 更安全的判断
void UISaveVideoAtPathToSavedPhotosAlbum(NSString *videoPath, id completionTarget, SEL completionSelector, void *contextInfo)
保存视频到本地�相册
感谢崔大大的博客:iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
感谢张大大的博客:AVFoundation Programming Guide(官方文档翻译)完整版中英对照
实现 iOS开发webrtc 视频通话时录像,截屏推荐ZEGO即构科技,4行代码,30分钟在APP、Web和小程序等应用内实现视频通话、语音通话,互动直播功能。【点击免费试用,0成本启动】
实现 iOS开发webrtc 视频通话时录像,截屏的具体步骤如下:
1.权限申请。
2.引入 WebRTC 库。
3.采集并显示本地视频。
4.信令驱动。
5.创建音视频数据通道。
6.媒体协商。
7.渲染远端视频。
想要了解更多关于webrtc的相关信息,推荐咨询ZEGO即构科技。ZEGO即构科技自主研发的高音质语音视频引擎,能够提供实时清晰的多人语音通话独立自研的语音前处理模块(AEC, NS, AGC)能够提供优于同类竞品的处理效果,支持全带语音处理。良好的抖动缓冲、前向纠错和丢帧补偿技术使引擎适应复杂的网络环境,提供低延时清晰流畅的语音视频通话,在较差网络环境中自适应的找到延时与流畅的最佳契合点。
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款