https://lixiaogang03.github.io/2021/11/02/Android-%E5%BD%95%E5%B1%8F/
https://xie.infoq.cn/article/dd40cd5d753c896225063f696
视频地址:
https://time.geekbang.org/dailylesson/detail/100056832
概述
在视频会议、线上课堂、游戏直播等场景下,屏幕共享是一个最常被用到的功能。要实现对屏幕画面的实时共享,端到端主要有这几个步骤:录屏采集、视频编码、实时传输、视频解码、视频渲染。
一般来说,实时屏幕共享时,共享发起端以固定采样频率(一般 8 - 15 帧)抓取到屏幕中指定源的画面(包括指定屏幕、指定区域、指定程序等),经过视频编码压缩(选择保持文本/图形边缘信息不失真的方案)后,在实时网络上以相应的帧率分发。
因此,录屏采集是实现实时屏幕共享的基础。即构作为专业的音视频云服务商,对于实时屏幕共享有一套完整的流程体系和 API 封装,让开发者可以更加方便快捷地拥有录屏直播的能力。
下面我们将介绍基于不同端,实现录屏采集的方法。本篇为您详解 Android 端录屏采集实现教程。
原理
在分享如何实现 Android 系统录屏采集前,我们先来看看其背后的原理。
Android 在 4.4 版本前要实现屏幕录制必须获取到 root 权限,但目前大部分设备的系统版本都高于 4.4,因此这种情况在此就不作赘述。
在 5.0 及以上版本,我们可以利用系统提供的 MediaProjection 和 MediaProjectionManager 进行屏幕录制,可以不需要获取 root 权限,但会弹窗获取权限,需要用户同意才行。
那么在 Android5.0 及以上版本,我们使用 MedaProjection 是如何把屏幕的数据录制下来呢?
这里我们就要说到两个“助攻的小伙伴”了——Surface 和 VirtualDisplay。