Flutter 移动端屏幕采集方案分享
现如今随着 Flutter 的应用越来越广泛,纯 Flutter 项目也越来越多,本篇内容主要分享的是 Flutter 移动端(iOS + Android)的屏幕采集的实现。
概述
在视频会议、线上课堂、游戏直播等场景,屏幕共享是一个最常见的功能。屏幕共享就是对屏幕画面的实时共享,端到端主要有几个步骤:录屏采集、视频编码及封装、实时传输、视频解封装及解码、视频渲染。
一般来说,实时屏幕共享时,共享发起端以固定采样频率(一般 8 - 15帧足够)抓取到屏幕中指定源的画面(包括指定屏幕、指定区域、指定程序等),经过视频编码压缩(应选择保持文本/图形边缘信息不失真的方案)后,在实时网络上以相应的帧率分发。
因此,屏幕采集是实现实时屏幕共享的基础,它的应用场景也是非常广泛的。
实现
准备
首先我们看看原生系统提供了哪些能力来进行屏幕录制。
-
iOS 11.0 提供了
ReplayKit 2
用于采集跨 App 的全局屏幕内容,但仅能通过控制中心启动;iOS 12.0 则在此基础上提供了从 App 内启动 ReplayKit 的能力。 -
Android 5.0 系统提供了
MediaProjection
功能,只需弹窗获取用户的同意即可采集到全局屏幕内容。
我们再看一下 Android / iOS 的屏幕采集能力有哪些区别。
-
iOS 的
ReplayKit