
iOS 和 iPadOS 中的 ReplayKit 安全性
ReplayKit 是一个允许开发者给其 App 添加录音和实时广播功能的框架。另外,它还允许用户给使用设备前置摄像头和麦克风进行录制和广播的内容添加注解。
影片录制
影片录制中构建了多层安全性:
许可对话框:开始录制前,ReplayKit 会显示一则征求用户同意的提醒,请求用户确认其录制屏幕、麦克风和前置摄像头的意图。这则提醒在每个 App 进程中显示一次,并且当 App 处于后台 8 分钟后会再次出现。
屏幕和音频捕捉:屏幕和音频捕捉发生在 ReplayKit 监控程序 replayd 中的 App 进程之外。这旨在确保录制的内容绝对不会被 App 进程访问。
App 内屏幕和音频捕捉:这允许 App 获取视频和样本缓冲,由权限对话框保护。
影片创建和储存:影片文件被写入的目录只能由 ReplayKit 子系统访问,绝对不会被任何 App 访问。这有助于防止第三方未经用户同意而使用录制内容。
终端用户预览和共享:用户可以通过 ReplayKit 提供的用户界面预览和共享影片。此用户界面通过 iOS 扩展项基础架构在进程外呈现,并且能够访问生成的影片文件。
ReplayKit 广播
影片广播中构建了多层安全性:
屏幕和音频捕捉:广播中的屏幕和音频捕捉机制发生在
replayd
中,与影片录制完全一样。广播扩展项:第三方服务若要参与到 ReplayKit 广播中,需要创建两个配置了 com.apple.broadcast-services endpoint 终端的新扩展项:
允许用户设置其广播的用户界面扩展项
用于将视频和音频数据上传到服务的后端服务器的上传扩展项
这个架构帮助确保主 App 对广播的视频和音频内容没有权限。只有 ReplayKit 和第三方广播扩展项能够访问。
广播挑选器:通过广播挑选器,用户可以使用通过“控制中心”即可访问且由系统定义的相同用户界面直接从 App 中启动系统广播。此用户界面使用私有 API 进行实施,是包含在 ReplayKit 框架内部的一个扩展项。它处于主 App 的进程外。
上传扩展项:第三方广播服务用来处理广播期间视频和音频内容的扩展项使用原始未编码样本缓冲。在此处理模式下,视频和音频数据将序列化并通过直接的 XPC 连接实时传递到第三方上传扩展项。视频数据编码方式如下:从视频样本缓冲中提取 IOSurface 对象,将其作为 XPC 对象安全地进行编码,通过 XPC 发送到第三方扩展项,再安全地解码回 IOSurface 对象中。