Background Android5.0以上提供了MediaProjection,方便截屏录屏等功能。...About MediaProjection MediaProjection 授予应用程序捕获屏幕内容或记录系统音频的能力。...) 取消注册MediaProjection的listener MediaProjectionManager 管理获取到MediaProjection具体类型。...成功获得用户允许后获取MediaProjection对象。...关键字:Android双屏异显 可以参阅Android Presentation接口说明,实现双屏异显的功能。
:231) at android.media.projection.MediaProjection....(MediaProjection.java:58) at android.media.projection.MediaProjectionManager.getMediaProjection...$MediaProjection.start(MediaProjectionManagerService.java:490) at android.media.projection.IMediaProjection...:name="android.permission.FOREGROUND_SERVICE" />2.设置service的type为mediaProjectionandroid:name...=".MediaService" android:enabled="true" android:foregroundServiceType="mediaProjection" android
近日,据外媒报道称,由于Android媒体播放功能存在漏洞,致使运行Lolipop,Marshmallow以及Nougat的Android智能手机很容易受到影响,从而导致用户手机屏幕被外人盗录而不自知。...Android MediaProjection服务中存在漏洞 这项漏洞出现在Android 5.0后加入Android Framework的MediaProjection服务之中,能够捕获用户屏幕内容以及记录系统音频...其实,该服务自诞生以来就一直存在于Android系统中,只是在Android5.0版之前,该服务需要具备根权限或是以系统密钥进行签名,才能利用录制屏幕上播放的影像,但5.0发布之后的MediaProjection...UI设计缺陷致使用户陷入攻击威胁 研究人员指出,要使用MediaProjection服务时,应用程序只需要通过一个“intent call”存取这项具有高度侵入性的系统服务,而要存取该服务,则只要以一个...此外,这也已经不是MediaProjection第一次出现此类安全问题,早在2015年10月,MediaProjection就曾出现过屏幕录制漏洞(CVE-2015-3878),利用这一漏洞,攻击者只需要给恶意程序构造一段特殊的
从 5.0 开始,Google 开放了系统录屏API:MediaProjection 和 MediaProjectionManager,不需要 root 权限,但是会弹出录屏权限申请框,用户同意后才能开始录屏...,类似 Android6.0 之后权限申请流程。...鉴于目前市面上5.0以下的 Android 手机占比很低且屏幕采集需要 root 权限实现复杂,接下来我们主要介绍 Android5.0 及以上版本的屏幕采集原理。...这些关键的角色在Android 端又是由谁来扮演呢? VirtualDisplayVirtualDisplay 是 Android 上的虚拟显示器。..." android:foregroundServiceType="mediaProjection"/> 二、构造Surface 1.如果屏幕采集数据用来录制视频,那么消费者可以是 MediaRecoder
实现效果 代码实现 微卡智享 采用的组件 MediaProjectionManager MediaProjection MediaCodec MediaMuxer Android 5.0后Google...MediaPronUtil类代码: package dem.vaccae.mediaprojection import android.app.Activity import android.app.Activity.RESULT_OK...import android.media.MediaFormat import android.media.MediaMuxer import android.media.projection.MediaProjection...= null private var mMediaPron: MediaProjection? = null private var mSurface: Surface?...FloatWindowJobService package dem.vaccae.mediaprojection.floatwindow import android.app.job.JobInfo
技术背景我们在做Android端同屏的时候,开发者希望可以高版本的Android系统上,在设备支持的前提下,可以采集到扬声器输出的audio,并支持和麦克风采集的audio相互切换,实现无纸化|智慧教室同屏不同...从Android 10(API级别29)开始,Android引入了媒体投影API(MediaProjection),允许应用捕获屏幕内容以及音频。...但是,直接捕获扬声器输出的音频并不是通过MediaProjection API直接实现的,而是通常与屏幕录制功能一起提供。...使用MediaProjectionManager:创建一个MediaProjection会话,并引导用户通过系统UI授权屏幕录制。捕获音频:在录制屏幕时,音频也会同时被捕获。...;return false;}MediaProjection media_projection = get_media_projection();if (null == media_projection
投屏效果预览 简单说明: 使用Android MediaProjection Api来完成视频的截图 通过WebSocket进行链接。...于是就照着思路,按图索骥,当作对MediaProjection Api的练习,来完成这个小项目 主要思路 1....获取屏幕的截屏 创建VirtualDisplay Android在Api 21以上为我们已经提供了系统的Api可以进行操作。...主要是这几个类的相互配合 MediaProjection和VirtualSurface,还有截图的话,使用ImageReader,三个类配合使用。 ?...简单示意图Again.png 通过Socket.iohttps://socket.io/ 就可以简单的实现 Android端的代码 通过WebSocket将Bitmap的字节码发送出去 private
android.os.IBinder import android.media.projection.MediaProjection import android.media.projection.MediaProjectionManager...enabled="true" android:foregroundServiceType="mediaProjection"/> 03 调用录屏时的...import android.media.projection.MediaProjection import android.media.projection.MediaProjectionManager...= null private var mMediaPron: MediaProjection? = null private var mSurface: Surface?..., mprn:MediaProjection, issavefile: Boolean = true) { isSaveFile = issavefile data?.
这里使用的是MediaProjectionManager、MediaProjection、VirtualDisplay,所以API级别最低支持到21。...; private MediaRecorder mMediaRecorder; private VirtualDisplay mVirtualDisplay; private MediaProjection...:name="android.permission.RECORD_AUDIO"/> android:name="android.permission.CAPTURE_AUDIO_OUTPUT..."/> android:name="android.permission.READ_EXTERNAL_STORAGE"/> android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 更多参数的设置请自行尝试,方法参数解释请点击这里 最后的最后, 祝大家元宵节快乐
Android 从5.0开始支持了MediaProjection,利用MediaProjection ,可以实现截屏录屏功能。...本库对屏幕采集编码进行了封装,简单的调用即可实现MediaProjection权限申请,H264硬编码,错误处理等功能。...invisibleFragment.requestMediaProjection(this) } 这样我们就可以在一个无界面的 Fragment 中拿到 onActivityResult中的授权结果和 MediaProjection...2.适配安卓10 如果 targetSdkVersion 设置的 29及以上,在获取到 MediaProjection 后调用 createVirtualDisplay ,将会收到一条异常 java.lang.SecurityException...super.onStartCommand(intent, flags, startId) } 在 startProjection 方法中,我们需要获取 MediaProjectionManager,再获取 MediaProjection
本文是Mob开发者平台技术副总监余勋杰基于MediaProjection实现Android全系统录屏功能的原理解析,包括了结合MediaRecorder和MediaCodec两套方案。...但这个方案有缺点,普通用户无法直接执行adb命令,只能要么求助于adb终端,比如pc端的android-sdk,又或者在安卓设备上获取root权限,再执行录屏命令。...基于MediaProjection来实现录屏有两种方案,如果结合MediaRecorder,则前者为输入,后者为输出,原理清晰,实现简单,代码也很少。...方案一:使用MediaRecorder作为媒体输出 让我们先来看一下MediaProjection API是个什么东西。...当录制完毕时,需要关闭MediaRecorder,并释放VirtualDisplay和MediaProjection,上面代码中的MediaProjection.Callback实例正是为了这个而定义的
获取屏幕数据很简单,Android 系统有提供对应的服务,难点在于传输数据到直播服务器,我们使用 RtmpDump 来传输 Rtmp 数据。...--->产生录屏数据 mediaProjection = mediaProjectionManager.getMediaProjection...(resultCode, data); } } 对数据进行 h264 编码 通过 MediaProjection 获取到的 YUV 裸数据,我们先需要对其进行 h264 编码...public void start(MediaProjection mediaProjection){ this.mediaProjection = mediaProjection;...使用第三方库 Rtmpdump 来实现推流到直播服务器,由于 Rtmpdump 的代码量不是很多,我们直接拷贝源代码到 Android 的 cpp 文件,如果需要用到 Ffmpeg 不能才用该种调用方式了
对于 Android 平台而言,要做好这件事并不轻松。...二、视频采集:MediaProjection + VirtualDisplay 的零拷贝设计Android 屏幕采集的核心是 MediaProjection,但真正的工程难点在于“如何将屏幕像素高效送入编码器...大牛直播 SDK 采用的路径如下:MediaProjection ↓ VirtualDisplay ↓ Surface ↓ ImageReader → RGBA...10+) 自定义 AudioPlaybackCaptureConfiguration 与 MediaProjection 绑定 防止音频重复采集(手机扬声器回灌问题) 并最终将 PCM 数据交给底层...在实际业务选型中,建议重点关注以下几个方面:① Android 高版本(12/13/14)的屏幕采集与权限兼容性高版本系统对 MediaProjection、麦克风权限、前台服务类型都有收紧,对 SDK
createScreenCaptureIntent方法创建一个Intent,该Intent会启动一个系统对话框,请求用户授权屏幕捕获;处理用户授权结果:在onActivityResult回调中,根据用户授权的结果来获取MediaProjection...对象;创建VirtualDisplay并捕获屏幕:获得了MediaProjection对象,就可以使用它来创建一个VirtualDisplay,这个VirtualDisplay会捕获屏幕内容并将其发送到指定的...Surface;资源释放:当屏幕捕获不再需要时,确保释放MediaProjection和VirtualDisplay对象,以避免资源泄露;视频编码:通过上述步骤,捕获带的屏幕内容需要进行视频编码,以便在网络中传输...import android.media.Image;import android.media.projection.MediaProjection;import android.media.projection.MediaProjectionManager...;import android.os.Build;import android.os.Handler;import android.os.HandlerThread;import android.os.Process
本app目前适配了mi5、mix2、谷歌nexus5和小米Max,适用于5.0以上的android系统,其他手机可能不能搜索按钮内容,但是题干一般情况下所有手机都能搜索。...一般来说ios系统的直播速度比android系统慢2-3秒,可以利用好这个时间差,延长找答案的时间。建议第二只手机使用iphone或者ipad。...这里5.0起的android系统提供了MediaProjection这个api,能够获取当前屏幕的帧。至于5.0以下需要root才能在后台进行屏幕截图,所以就放弃了。...useOcrToSearch方法内部如图 useOcrToSearch 这里的代码也很简单,构造MediaProjection。...通过MediaProjection获取一个VirtualDisplay并将ImageReader的Surface放入。 此时ImageReader中每时每刻都会暂存一张当前屏幕的图片。
屏幕捕捉 Android5.0之后开放了屏幕捕捉的API,因此开发者便可以直接通过代码进行截图与录屏,而无需操作系统底层了。...注意MediaProjectionManager是Android5.0之后新增的工具,故代码中要补充判断系统版本,如果是4.*及以下版本,则不可处理屏幕捕捉操作。...具体的屏幕捕捉,还要调用媒体投影管理器对象的getMediaProjection方法,获取MediaProjection媒体投影对象。...MediaProjection主要有两个方法,说明如下: createVirtualDisplay : 创建虚拟显示层。可分别指定显示层的名称、宽度、高度、密度、标志、渲染表面等等。...有关悬浮窗的说明参见《Android开发笔记(一百一十八)自定义悬浮窗》。
在 Android 设备上,某些浏览器可能会支持该方法,例如 Chrome 和 Firefox 浏览器,但不是所有的浏览器都支持。...在移动设备上,如果需要获取屏幕视频流,可以尝试使用一些其他的解决方案,例如使用第三方的移动应用程序或库,或者使用平台特定的 API,例如 Android 上的 MediaProjection API。
0x01 第一章 漏洞原理 一、 Android 5.0新特性 Android 5.0新增的屏幕录制接口,无需特殊权限,使用如下系统API即可实现屏幕录制功能: MediaProjection: A token...MediaProjection.Callback: Callbacks for the projection session....MediaProjectionManager: Manages the retrieval of certain types of MediaProjection tokens....而从受影响的系统来看,由于Android 5.0以下版本没有提供屏幕录制接口,所以,该漏洞仅影响Android 5.0及以上版本系统。 二、 Android平台应用受威胁概况评估 ?...根据360互联网安全中心数据显示,Android平台应用软件中默认开启禁止截屏(录屏)功能的约占0.1%,即大约99.9%的Android软件都没有抵御这种威胁的能力。
#Android截屏的几种实现 ##方式一 public static Bitmap capture(Activity activity) { activity.getWindow()...命令截屏 例如: adb shell screencap -p /sdcard/sreenshot1.png 命令格式:adb shell screencap -p + 文件路径 + 文件名 ##方式三 从Android...parseData(data); } } } } private void parseData(Intent data){ MediaProjection...http://blog.csdn.net/buptgshengod/article/details/39155979 下面这个库封装了cmd截屏和5.0以上的截屏: https://github.com/Android-ScreenShot
命令截屏 例如: adb shell screencap -p /sdcard/sreenshot1.png 命令格式:adb shell screencap -p + 文件路径 + 文件名 方式三 从Android...parseData(data); } } } } private void parseData(Intent data){ MediaProjection...http://blog.csdn.net/buptgshengod/article/details/39155979 下面这个库封装了cmd截屏和5.0以上的截屏: https://github.com/Android-ScreenShot