必须是USB-C接口,所以在使用的时候需要确认USB video Class(UVC)
好像也可以使用HDMI
AVFoundation
用于处理一批视频多媒体数据的创建,编辑,播放和捕获,时音频视频功能的基础库。
有什么功能呢:
1.可以支持多种音频视频格式,用来播放音频和视频
2.通过麦克风和摄像头录制音频视频内容
3.可以对视频内容进行编辑添加特效等
4.支持处理音视频文件的元数据,如标题,作者,描述
5.将多个音视频文件 混合成一个文件
AVCapture-prefixed
使用external camera的流程
app先使用AVCaptureDevices表示camera和microphone,这里面封装了AVCaptureDeviceInput来嵌入一个
AVCaptureSession
AVCaptureSession是一个central control object of the AVCapture graph
AVCaptureSession会接收捕获设备的数据(比如说camera,microphone),然后将数据封装后给输出设备(比如说sceen)有的时候会放到一个文件中,甚至变成一张图片
AVCapturePutputs
包含movieFile,Phote,VideoData,AudioData,MetaData,DepthData
MovieFileOutput: 会记录QuickTime movies
PhotoOutput: captures high-quality stills and live photos
Data outputs:deliver video or audio buffers from the camera or mic to your app
MetaData,DepthData:for live camera preview ,is a special type of output
AVCaptureVideoPreviewLayer
是CALayer的子类
每一个external camera 可以被看作一个ACVaptureDevice instance
三个重要的属性:media type ,device type ,position
AVMediaType.video
AVCaptureDevice.DeviceType.external
AVCaptureDevice.Position.unspecified
external camera相较于build-in camera需要更注意,因为user可以connect和disconnect
if reconnected,camera is represented by a new AVCaptureDevice
可以通过key-value observe来检测连接
AVCaptureDevice.isConnected和AVCaptureDevice.DiscoverySession.devices
当设备连接状态发生改变的时候AVCaptureDevices也会post a norifications
AVCaptureDeviceWasConnected
AVCaptureDeviceWasDisconnected
然后将这些消息发送到background queues
synchronize with AVCaptureSession and UI
专业用语
build-in camera 内置摄像头
如何升级到IOS17
进入 Apple Beta 版软件计划 网站 sign in后点击IOS17然后在ipad上
settings->general->software update->beta update选择IOS17 public就行了
apple demo
CACam
必须是IOS17,并且不能允许在simulate上,因为xcode是没有权限访问camera的
AVCam 是默认选择后置摄像头
在AVCaptureSession delegate any interaction 时是将一个事件放到dedicated serial dispatch queue(sessionQUeue 并不是main queue)
就是不会阻碍其他事件
这些被使用的microphone或者camera都需要用户授予权限,AVFoundation用AVAuthorizationStatus枚举了权限state,来辨别哪些device是restricted(受限),denied等等
通过使用discovery session来列出有效的设备类型,比如说有broken camera(损坏的摄像机)就不算作有效的device
问题
如果是要真机编译就需要xcode改为 xcode15 beta
官网下载