
接下来实现一个简单的Android屏幕镜像功能,主要涉及到以下这些知识点:
Android50 及更高版本支持屏幕采集,屏幕采集需要用动态申请权限。
如上,获取截屏权限后,就可以开始截屏了。
通过 MediaProjection 的 createVirtualDisplay 方法可将截屏画面给到指定的 surface 中,这里我们截屏的画面不需要显示,而是需要将画面数据给到 MediaCodec 编码,所以这里需要通过 MediaCodec 生成一个 surface 用于接收截屏数据。
接下来调用 MediaCodec 的 start 方法,就可以获取编码数据
由于是通过 surface 获取的编码数据,所以这里没有 onInputBufferAvailable 回调,只需监听 onOutputBufferAvailable 方法,就可以获得编码数据。 Android50 之后系统推荐使用这种通过异步获取编解码数据的方式,同时 Android50 之后系统也提供了同步获取编解码数据的方式。
Android50 之前的同步获取方式已经标记废弃了。
接下来可以在 encodeFrame 方法中处理 h264 数据
这里将数据回调给调用者处理,调用者可以储存为文件,也可以直接通过 socket 发送到服务器处理。
结束屏幕录制的时候要及时释放这些系统资源
屏幕的采集编码暂到这里,接下来我们要在本机完成解码显示。
获取了屏幕大小不就等于获取了坐标么。
Display My_Display=getWindow()getWindowManager()getDefaultDisplay();
int Max_X=My_DisplaygetWidth();
int Max_Y=My_DisplaygetHeight();
这个可以加入到方法中人后随时调用,也可以程序初始化的时候响应一次。
在Android中到处可见接口回调机制,尤其是UI事件处理方面,本文给大家介绍android接口回调机制,涉及到android接口回调相关知识,对本文感兴趣的朋友可以参考下本篇文章
在使用接口回调的时候发现了一个经常犯的错误,就是回调函数里面的实现有可能是用多线程或者是异步任务去做的,这就会导致我们期望函数回调完毕去返回一个主函数的结果,实际发现是行不通的,因为如果回调是多线程的话你是无法和主函数同步的,也就是返回的数据是错误的,这是非常隐秘的一个错误。那有什么好的方法去实现数据的线性传递呢?先介绍下回调机制原理。
回调函数
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
开发中,接口回调是我们经常用到的。
接口回调的意思即,注册之后并不立马执行,而在某个时机触发执行。
举个例子:
A有一个问题不会,他去问B,B暂时解决不出来,B说,等我(B)解决了再告诉你(A)此时A可以继续先做别的事情。
那么就只有当B解决完问题后告诉A问题解决了,A才可以能解决这个问题。
代码中比如最常用的:
一个Activity中给按钮一个接口回调方法,只有用户点击了这个按钮,告诉按钮被点击了,才会执行按钮接口回调的方法
以上就是关于Android屏幕镜像一:屏幕采集 + MediaCodec编码全部的内容,包括:Android屏幕镜像一:屏幕采集 + MediaCodec编码、android手机屏幕最右下角坐标怎么获取,需要的是动态获取哈,好针对不同屏幕、Android动态加载调用方法时方法的参数里面带有接口,如何获取接口的回调等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)