iOS端屏幕录制开发指南

iOS端屏幕录制开发指南一 概述实现直播过程中共享屏幕分为两个步骤 屏幕数据采集和流媒体数据推送

一、 概述

实现直播过程中共享屏幕分为两个步骤:屏幕数据采集流媒体数据推送。前对于 iOS 来说,屏幕采集需要系统的权限,受制于iOS系统的限制,第三方 app 并没有直接录制屏幕的权限,必须通过系统的功能来实现。

本文将描述iOS系统的屏幕共享的应用、实现、限制、实现细节等方面调研结果。(注:由于iOS 10和之前的系统只支持App内录制屏幕,所以只做简单的介绍,不做详细说明)

二、 应用

屏幕共享早起出现在视频会议当中,后来在一些游戏直播中也出现了大规模应用,Apple早期不支持屏幕共享,但随着直播的盛行,Apple也是根据用户的需求,给予了屏幕共享的支持,推出了 ReplayKit 库来迎合这种场景。

市面上的屏幕共享的场景大致分类如下:

  • 一、:远程操作屏幕 :辅助他人对手机进行操作。如年轻人帮组老年人进行远程设置,客服帮组客户解决软件故障或者使用帮组,有效的解决语言表述低效的问题。
  • 二、:游戏直播:知名游戏主播可以把手机上玩游戏的画面直播给其他人,可以进行游戏教学,游戏解说,让其他人更好的学习游戏技巧。
  • 三、:视频会议,开会房把手机内容给他人观看进行解说,如手机中的邮件内容、图片、文档等,方便参会方快速共享信息,提高沟通效率。

三、 各系统实现屏幕共享

系统覆盖率

根据苹果官网的数据显示,截止到2021年6月,iOS系统各个系统版本占有率大致如下图所示,可见,目前iOS13 及以下系统的用户覆盖率不足2%,而iOS14系统的覆盖率约为 90%,iOS13系统的覆盖率约为8 %。顾为了兼顾老版本,目前市面上应用一般会兼容到 iOS 9。

在这里插入图片描述

iOS 8

iOS8 以及以前的版本,系统没有提供相应的功能,通过激活成功教程系统的功能调用私有的API来实现。由于 iOS8 太过古老而且运行 iOS8 系统的设备也基本上支撑不起来直播的功能,我们这里不做详细讨论,有兴趣的可以研究一下。

iOS 9系统

Apple 在iOS 9 推出了 ReplayKit 框架,提供了录屏功能,但是限制是只能录制本App内的屏幕。录制完成后会生成一个视频文件,只能通过 RPPreviewViewController 来预览,编译生成的文件,录制过程中无法获取数据,只能将最终录制完毕的整个mp4文件提供给开发者,所以实际上并非真正的屏幕的直播共享,无法保证实时性。

iOS 10系统

iOS 10 Apple 推出了 Broadcast Upload Extention 和 Broadcast Setup UI Extention,来解决录屏的问题。

首先介绍一下App Extension,官方文档(Extension的官方文档)。Extension是对 App 的扩展,在一定程度上打破了沙盒的限制,提供了应用间通信的可能。Extension 是一个独立运行的进程,有自己的生命周期。下图所示:

在这里插入图片描述

虽然iOS 10 系统解决了之前系统的一系列弊病,但是仍然没能解决只能录制当前app的屏幕内容的问题,这样会限制一些应用的使用场景。

iOS 11系统

iOS 11 的发布正式直播兴盛的年代,为了迎合市场需求,Apple 提供了跨 app 录屏的功能,可以实现录取整个屏幕的功能。 虽然ReplayKit2 已经可以满足开发者的多数需求,但是对于用户来说,这个版本在实现屏幕直播时,需要用户提前在手机设置中配置出屏幕录制的访问控制权限,使屏幕录制按钮显示在系统的上拉管理菜单中,并且在录制时,上拉底部菜单调出快捷管理菜单,并且长按屏幕录制圆形按钮才能开始录制和直播。复杂的操作流程,让用户使用的门槛增高。所以在iOS 11 上屏幕共享功能也显得很单薄。

iOS12系统

iOS 12 在iOS11的基础上进行了优化,并提供了RPSystemBroadcastPickerView,解决了录制屏幕,用户无需在控制中心手动启动。

总结

结合上面iOS各个系统版本对屏幕录制的限制的分析,从版本稳定性和发布可靠性角度来说,我们应该从iOS12系统开始提供屏幕录制功能,而之前的系统版本不做兼容。如果只录制 app 页面进行直播,那么系统可兼容到iOS 9。

四. 屏幕共享注意事项

  • 由于 iOS 手机屏幕分辨率较高,考虑到内存占用和传输效率,需要对采集图像和处理过程进行优化,一般限制分辨率在720P以内。
  • Extension 子进程有50M内存限制,当在该线程内存超过50M会导致程序崩溃,就是由于这个限制,业界相似的处理方案都会限制其视频质量不超过720P,高端机型的视频针数保持在30之内,低端机型视频帧率保持在10之内。
  • 子进程崩溃会导致页面一直弹提示框,用户只能重启手机来解决该问题。
  • 子进程和 host app 通信,需要看传输的内容选择不同的形式:

    1、通过配置app group的方式共享文件或者UserDefault。

    2、进程间通知:

今天的文章 iOS端屏幕录制开发指南分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-01-02 09:57
下一篇 2025-01-02 09:51

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/99776.html