Android屏幕镜像一:屏幕采集 + MediaCodec编码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android屏幕镜像一:屏幕采集 + MediaCodec编码相关的知识,希望对你有一定的参考价值。

参考技术A 接下来实现一个简单的android屏幕镜像功能,主要涉及到以下这些知识点:

Android5.0 及更高版本支持屏幕采集,屏幕采集需要用动态申请权限。

如上,获取截屏权限后,就可以开始截屏了。
通过 MediaProjection 的 createVirtualDisplay 方法可将截屏画面给到指定的 surface 中,这里我们截屏的画面不需要显示,而是需要将画面数据给到 MediaCodec 编码,所以这里需要通过 MediaCodec 生成一个 surface 用于接收截屏数据。

接下来调用 MediaCodec 的 start 方法,就可以获取编码数据

由于是通过 surface 获取的编码数据,所以这里没有 onInputBufferAvailable 回调,只需监听 onOutputBufferAvailable 方法,就可以获得编码数据。 Android5.0 之后系统推荐使用这种通过异步获取编解码数据的方式,同时 Android5.0 之后系统也提供了同步获取编解码数据的方式。

Android5.0 之前的同步获取方式已经标记废弃了。

接下来可以在 encodeFrame 方法中处理 h264 数据

这里将数据回调给调用者处理,调用者可以储存为文件,也可以直接通过 socket 发送到服务器处理。

结束屏幕录制的时候要及时释放这些系统资源

屏幕的采集编码暂到这里,接下来我们要在本机完成解码显示。

以上是关于Android屏幕镜像一:屏幕采集 + MediaCodec编码的主要内容,如果未能解决你的问题,请参考以下文章

如何在屏幕镜像期间锁定Android屏幕?

Android技术分享| 一行代码实现安卓屏幕采集编码

Android技术分享| 一行代码实现安卓屏幕采集编码

如何检测Android设备上启用的屏幕镜像

在 Android 中以编程方式启用/禁用屏幕镜像。 [根]

Vysor让你在电脑上完全控制android手机屏幕镜像