十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
近期在开发中,需要用到相册及摄像头。而这些资源在安装应用后的首次使用时,都会弹出Alert窗口,以向用户请求相应的权限。用户可以在Don`t Allow和OK间选择。如果不允许的话,该应用是不能使用相应的资源的。如摄像头不允许,页面则会停留在拍照时的页面,但是是一片漆黑的,无法获取摄像头的拍摄信息。相册不允许则停留在相册页面,但是是空白页,不显示相册内容。此时需要在手机的设置应用的Privacy选项内修改权限,然后再次进入时,就可获取相应的资源。
成都创新互联公司专注于金州企业网站建设,响应式网站设计,成都做商城网站。金州网站建设公司,为金州等地区提供建站服务。全流程定制设计,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务
在我的应用中存在个bug就是,当用户首次便允许时,应用会跳转到上一级页面,并不会停留在相册或者摄像机页面,而且还造成上一级页面的状态栏不显示,这让我很尴尬。所以我就想重现这个现象,便于我更改。但是,此时我就遇到个问题,无论我完全卸载手机上的该应用还是在plist文件中更改bundle name 以及Bundle display name 或者版本号,都不行。此时我突然想到真正区分应用的是bundle Id。所以我尝试了下更改bundle ID,OK,完美达到我的目的。此后完全卸载手机上的该应用后(可选),再更改下bundle ID然后重新安装,此后每次需要获取相册或者相机资源时,都会弹出一个Alert,让用户进行选择。接下来就需要根据用户选择的结果进行相应的处理。
在接下来的更改中让我十分郁闷,因为当用户选择OK后,应用显示的页面会不稳定。有时候会立即启动相机或者立即进入相册,但有时候会跳转到上一级页面,WHAT THE FUCK!!!
由于我不知道如何获取用户拒绝或许可(也即按Dont`t或者OK时),也没找到相应的代理,这个问题仍然没有解决,甚是郁闷!!!如果有哪位大神知道如何解决,请指导小弟,万谢。
该框架框架包含视频相关的APIs和音频相关的APIs。
针对音频及视频,其主要提供的功能可以归纳为4各方面:
1)、Capture
音频、视频、图像媒体的捕捉,并输出我们可用的数据对象的过程。
2)、Edit
针对现有的媒体片段(音频片段或视频片段),重新创建Assets,重新加工、生成新的媒体片段。例如,Reading, Writing, Reencoding Assets, Thumbnails
3)、Export
提供导出音视频的API。例如,修改文件格式、消减时长等。
4)、Presentation
例如,播放、音视频的预览
设备的输入源主要包括:麦克风(Microphone),摄像头(Camera),屏幕等
输入源一般包括:AVCaptureVideoPreviewLayer,AVCaptureAudioPreviewOutput,文件、Raw Buffer等。
从一个设备,例如照相机或者麦克风管理捕获,组合对象来表示输入和输出,并使用 AVCaptureSession 的实例来协调它们之间的数据流。
一个简单的会话协调:
AVCapture Session作为整个Capture的核心,不断从输入源获取数据,然后分发给各个输出源,从而完成一次简单的会话。
AVCaptureSession参数配置
开始会话
结束会话
然而,很多情况下,需要考虑多个输入源是如何被表示以及如何连接到输出。
输入源有自己的硬件参数可以设置流控,输出源作为一个被动接受对象,它并没有太多流控设置,所以苹果巧妙的引入AVCaptureConnections。每个Output与Session建立连接后,都会分配一个默认的AVCpatureConnection。
AVCaptureConnections就是Session和Output中间的控制节点。很多实时数据,也都是从connection得到的。
输入设备的配置
输出的配置
接收输出资源
1)、视频
2)、照片输出
调用摄像头是用UIImagePickerController实现的
先初始化实例,令其属性sourceType为UIImagePickerControllerSourceTypeCamera
然后用类方法isSourceTypeAvailable来判断是否可用。
摄像头页面就是个congtroller,你写个页面继承imagepick啥的那个,然后在你继承的页面上重绘摄像头页面!!想加啥都可以
使用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 13中,苹果终于推出了多摄像头同步开启支持,允许应用程序在iPhone或iPad上同时捕获来自多个麦克风和摄像头的照片、视频、音频,元数据和深度信息。
自从OS X Lion以来,苹果长期一直支持macOS上的多摄像头捕获,但到目前为止,硬件限制使其无法推出适用于iPhone和iPad的API。
iOS 13中的新功能和API将允许开发人员提供同时从前置摄像头和后置摄像头传输视频、照片或音频的应用程序。
iOS 13多摄像头支持w/ AVCapture
在WWDC19期间推出新功能时,苹果演示了一个画中画视频录制应用,该应用从前置摄像头录制,同时还可以从主摄像头录制。
该演示应用程序还启用了视频录制功能,以及在照片应用播放期间即时交换两个摄像头的功能。该功能还可以让开发人员控制双TrueDepth摄像头,包括后视宽角镜头或后视长焦镜头的单独视频流。
iOS 13支持新的多摄像头功能,仅适用于较新的硬件,包括iPhone XS、iPhone XS Max、iPhone XR和iPad Pro。
苹果列出了许多支持多摄像头捕获的格式(如上图所示),开发人员会注意到它会对相机的正常功能施加一些人为限制。
由于移动设备的功率限制,与Mac不同,iPhone和iPad将仅限于单个多摄像头会话,这意味着你无法同时在多个应用中开启多个摄像头,或者使用多个摄像头进行多个会话。还将有各种支持的设备组合,指示在某些设备上支持哪些摄像机的捕获组合。
苹果本身并没有在iOS 13相机应用程序中使用任何新的多摄像头功能,但我们认为它现在正在出现,因为它正式在AVCapture中推出了支持。
Semantic Segmentation Mattes(语义分割蒙版)
iOS 13中相机捕捉的新功能还有语义分割蒙版。在iOS 12中,苹果在内部使用了Portrait Effects Matte为人像模式照片设置内容,将主体与背景分开。在iOS 13中,苹果推出了所谓的Semantic Segmentation Mattes来识别皮肤、头发和牙齿,并通过API进一步改进这些信息,供开发人员使用。
在WWDC会议上,苹果展示了新技术的演示应用程序,允许将照片中的主体与背景分离,并将头发、皮肤和牙齿隔离,以轻松添加效果,包括面部涂料和头发颜色变化(如上图)。
开发人员可以在苹果的网站上了解有关多摄像头支持和语义分段的更多信息,它还提供了演示应用程序的示例代码。