安卓VirtualDisplay虚拟屏幕如何实现没有内容显示mirror内容(aosp14版本)

Android VirtualDisplay的用法和遇到的点击事件问题 前言 最近在看Android 多屏相关的问题,初步接触到了DisplayManager的一些东西,发现网上资料较少,自己学习到的总结一下。 阅读详情

背景:

上一篇blog已经对mirror模式显示镜像屏幕内容进行了详细讲解:

安卓VirtualDisplay虚拟屏幕如何实现没有内容显示mirror屏幕内容

不过这个分析版本是基于aosp13,在这个发布后,有学员在aosp14上进行验证,发现还是有较大的差异相比文章。我这边也亲自试了一下,发现原理其实相差不大,本质都还是一样的对layerStack进行过滤匹配,不过相比aosp13来说只是变化layerStack对象变变化了。

剖析aosp14相关原理

1 先看看镜像模式:

在这里插入图片描述
这个时候进行dumpsys SurfaceFlinger
主要看以下两个部分
1、看看虚拟display对象的layerStack

在这里插入图片描述
可以看到,这个aosp14版本上这里Virtual Display的layerStack在镜像模式就是2,而aosp13版本时候在镜像模式layerStack是0。这里就是很多同学想问的差异点,不理解这里mirror模式就是2,那还怎么让镜像屏幕内容显示在Virtual Display上。
这里就是上面我提到的变化的是layerStack的对象,原来aosp13上面变化是Display的layerStack值,但是在aosp14上面变化的是Layer对应的layerStack

看看Layer的变化:
在这里插入图片描述
这里面主屏幕的Layer都会在虚拟屏幕有一个对应的Mirror Layer即直接对主屏幕的每一个layer进行了Mirror,再看看这些Mirror Layer的layerStack都是2,这样就可以和Virtual Display的layerStack进行完全的匹配。
在这里插入图片描述
到这里大家应该清楚了aosp14相比aosp13来说本质就是layerStack的对象变换了一下,原来aosp13变换一直是Display为对象,aosp14上面变化的对象是Layer,这样就实现了没有内容时候可以显示另一个屏幕的内容。

2 在看看非镜像模式,自己屏幕有内容情况

虚拟屏幕展示是时钟app,和主屏幕展示不一样
在这里插入图片描述

同样要通过dumpsys SurfaceFlinger来分析调研

先看Virtual Display的layerStack情况:
在这里插入图片描述看到一样是2

再看看显示图层Layer情况:
在这里插入图片描述
可以看到上面的DeskClock的图层已经没有了Mirror字样,因为他本身就是只属于Virtual Display的图层

到此也就清楚aosp14和aosp13这一部分的差异,其实本质上就是对layerStack的对象主体从Display到layer这样过程而已。

ps:注意如果在dumpsys SurfaceFlinger时候发现了没办法显示虚拟屏幕layer时候需要去surfaceflinger中修改以下代码放开dump

在这里插入图片描述

更多framework实战干货,请关注下面“千里马学框架”

Android P 图形显示系统(四) Android VirtualDisplay解析 文章目录Android VirtualDisplay解析ImageReader和VirtualDisplay使用示例ImageReader介绍VirtualDisplay的创建Native创建VirtualDisplay数据流分析ImageReader获取数据 Android VirtualDisplay解析 Android支持多个屏幕:主显,外显,和虚显,虚显就是我们要说的VirtualDisp... 阅读详情

相关推荐

Android 截屏实现、屏幕截图、MediaProjection、ImageReader

Android 截屏、截图、MediaProjection、ImageReader

qq_37980878的博客 1万+

AAOS车载系统+AOSP14系统攻城狮入门实战课

AOSP14 + AAOS车载系统 + Pixel5手机 + 谷歌第二代模拟器Cuttlefish实战专题  鉴于市场对Android应用开发者需求减少,而最近的新能源造车如火如荼的发展,这也为提供了很多的车载系统开发的岗位。  但是,Android APP开发者如何快速的转Android系统APP、ANdroid Framework、Android 相机、Android 图形等领域,成为一个系统攻城狮,来加强自己未来的竞争力呢?  但是系统开发过程比较复杂、繁琐,而Android源码又比较庞大,特别是高版本的Android源阿,动辄200GB起步,也劝退了很多想深入Andriod/车载系统AAOS的开发者。  本课程是为Android系统与车载系统AAOS开发者准备的入门课程,其中的内容是以谷歌手机Pixel5、谷歌第二代虚拟机Cuttlefish为硬件载体,以最新的AOSP14源码和车载系统源码AAOS14为软件内容。  介绍了如何下载最新AOSP源码或者车载系统AAOS适配Pixel5手机,在如果没有硬件设备的情况下,还介绍如何借助Cuttlefish虚拟机来开发,课程没有过多的废话,都是动手实际操作的内容。  以下是课程大纲:

第 24 章:显示系统

是代表一整个逻辑显示器的;在它之下,Android 把窗口组织为容器树。每一个把具备相同特性、处于同一 Z 轴区间的窗口归为一组。文档说明三种类型,保障 Z 轴顺序正确性:BELOW_TASKS:仅可存放 BELOW_TASKS 类型 DisplayArea 以及位于任务下层的 WindowTokenABOVE_TASKS:仅可存放 ABOVE_TASKS 类型 DisplayArea 以及位于任务上层的 WindowToken。

dengfuma的专栏 350

Android Graphics 显示系统 - VirtualDisplay的初印象 - 简单示例

VirtualDisplay的初印象 - 简单示例

向晚流年 3657

android11 surfaceflinger mirrorSurface 镜像操作

android11 surfaceflinger mirrorSurface 镜像操作

我的博客 1658

MIA文献阅读 —— 深度学习在医学图像分析中的最新进展及临床应用【2024】_再现性;深度学习

coderVAEVAEVAE) (Kingma威林,2014)在概率性的工作方式学习观测数据之间的映射空间x∈Rmx∈R^mx∈Rm 和潜在的空间z∈Rnmnz∈Rn(m>>n)。作为一个潜变量模型,VAEVAEVAE制定这个问题作为观察样品的最大化对数似logpxlog∫px∣zpzdzpx∣zp (x | z)p(x∣z)可以很容易地使用神经网络建模,和pzp (z)

2401_84181704的博客 1243

安卓VirtualDisplay虚拟屏幕如何实现自身display没有内容显示mirror屏幕内容(aosp13)

VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR设置1、会在DisplayContent的mApplySurfaceChangesTransaction中对Display是否有内容进行确定2、一旦涉及了Display的上有内容到无内容的变化会调用setDisplayLayerStack来重新设置layerStack3、在sf中layer会对layerStack进行匹配然后决定显示哪个Display本文章更多详细代码和资料需要购买课程获取。

learnframework的博客 2532

Qt跨平台CAN通信实战:Vector、PCAN与周立功设备统一接口设计

本文针对Qt开发中常见的多品牌CAN设备兼容难题,提出了一套统一的跨平台CAN通信接口设计方案。通过抽象层封装,实现了对Vector、PCAN和周立功设备的统一操作,上层业务代码无需修改即可在不同硬件间切换,有效解决了驱动API差异、环境配置复杂和维护成本高等痛点,显著提升了代码复用率和开发效率。

weixin_29161785的博客 332

安卓VirtualDisplay虚拟屏幕如何实现没有内容显示mirror屏幕内容(aosp13)

VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR设置1、会在DisplayContent的mApplySurfaceChangesTransaction中对Display是否有内容进行确定2、一旦涉及了Display的上有内容到无内容的变化会调用setDisplayLayerStack来重新设置layerStack3、在sf中layer会对layerStack进行匹配然后决定显示哪个Display本文章更多详细代码和资料需要购买课程获取。

liaosongmao1的专栏 1001

西门子PLC实战:基于1200/1500的工业物联网MQTT通讯全解析

本文详细解析了如何在西门子S7-1200/1500系列PLC上实现工业物联网MQTT通讯。通过从硬件准备、网络配置到TIA Portal中MQTT_Client功能块的实战编程,手把手指导工程师打通车间数据桥梁,解决信息孤岛问题,实现PLC数据高效上云或设备间互联。

whisky的博客 1090

超详细版risc-v五级流水线cpu硬件设计实现解析

深入剖析risc-v五级流水线cpu的硬件架构与设计细节,涵盖指令流程、模块划分与关键时序控制,帮助理解risc-v五级流水线cpu的工作机制与优化策略。

weixin_42437253的博客 1633

安卓14/aosp14相比安卓13录屏多了MirrorRoot深入剖析解密-千里马android framework实战开发

到这里,就把学员提出的录屏时候Mirror问题前后版本出现与不出现的原因搞清楚了,整体其实探索出来了结果后并不是很复杂,但是如果要自己去探索还是有一定的难度的。虽然有难度,马哥还是希望大家平时遇到相关的技术疑问时候不要轻易放弃或者完全不管,应该努力用自己学习知识应用起来,结合起来,去分析实际开发中遇到一些问题。只有这样不断探索,技术才会不断成长,成长到有一天你发现你对这个模块理解深入程度基本上也不输给任何人的时候,你就是这方面的顶级专家。本文章更多详细代码和资料需要购买课程获取。

learnframework的博客 1797

Doris副本修复实战:从状态机到手动修复的完整指南

在分布式数据库系统中,多副本机制是实现高可用与数据一致性的核心技术。其原理是通过在不同节点存储数据的多个拷贝,确保部分节点故障时服务仍可继续。这项技术的核心价值在于保障数据可靠性,并支撑在线分析处理(OLAP)等对数据一致性要求高的应用场景。当副本出现损坏、丢失或版本不一致时,系统通常依赖自动修复机制,但在元数据损坏、多副本同时故障等复杂场景下,自动修复可能失效,需要深入理解副本状态机并借助手动工具介入。本文将聚焦Doris数据库,解析Tablet副本状态流转(如BAD、VERSION_ERROR),并详细

weixin_32288959的博客 461

【Android】VirtualDisplay创建流程及原理

【代码】【Android】VirtualDisplay创建流程及原理。

林多 1万+

告别虚拟机!在Windows上用WSL+VSCode搞定ArduPilot开发环境(保姆级避坑指南)

本文提供了一份详细的保姆级指南,介绍如何在Windows上使用WSL和VSCode搭建高效的ArduPilot开发环境,告别虚拟机性能损耗。从WSL安装、VSCode配置到ArduPilot固件编译和调试技巧,涵盖开发全流程中的关键步骤和常见问题解决方案,帮助无人机开发者快速构建专业级开发环境。

weixin_42543046的博客 461

使用RV1126实现人脸识别——将Facenet模型转换为RKNN模型

在本文中,我们将探讨如何在RV1126芯片上实现人脸识别,并将Facenet模型转换为RKNN(Rockchip Neural Network)模型,以在RV1126上进行高效的人脸识别。Fine-tuning是指在预训练模型的基础上,使用自己的数据集进行进一步训练,以适应特定的任务。同时,我们需要下载Facenet模型的预训练权重,这些权重将作为我们的基础模型。综上所述,我们详细介绍了如何在RV1126上实现人脸识别,并将Facenet模型转换为RKNN模型。方法将模型导出为RKNN格式的文件。

code_program481的博客 1522

Android Framework 常见解决方案(16)android多VirtualDisplay交互方法

该文主要介绍了 多个虚拟屏同时显示并可交互 的解决方案。主要解决多个 VirtualDisplay 虚拟屏同时显示的问题 和 输入交互的问题。

wangdsh的博客 8609

如何实现Android端的录屏采集

一、概述 在视频会议、线上课堂、游戏直播等场景下,屏幕共享是一个最常被用到的功能。要实现对屏幕画面的实时共享,端到端主要有几个步骤:录屏采集、视频编码、实时传输、视频解码、视频渲染。 一般来说,实时屏幕共享时,共享发起端以固定采样频率(一般 8 - 15帧)抓取到屏幕中指定源的画面(包括指定屏幕、指定区域、指定程序等),经过视频编码压缩(选择保持文本/图形边缘信息不失真的方案)后,在实时网络上以相应的帧率分发。 因此,录屏采集是实现实时屏幕共享的基础。即构作为专业的音视频云服务厂商,对于实时屏幕共享有一套完

RTC之旅 3703

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

安卓录屏使用VirtualDisplay虚拟屏幕;MediaRecorder,媒体录影机;

/虚拟屏幕通过MediaProjection获取,传入一系列传过来的参数。.absolutePath + “/” + “录屏文件” + “/”//设置视频存储地址,返回的文件夹下的命名为当前系统事件的文件。//如果确认为视频类型,设置根目录,绝对路径下的自定义文件夹中。//初始化完成,进入准备阶段,准备被使用。//不是音视频文件,不保存,无路径。//初始化Recorder录像机。//可能创建时会出错,捕获异常。//设置录像机的一系列参数。//创建成功了,返回该目录。//设置视频大小,清晰度。

weixin_45877710的博客 2498

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Android 音视频开发(六) -- Android Mediaprojection 截屏和录屏

Android 音视频开发(一) – 使用AudioRecord 录制PCM(录音);AudioTrack播放音频 Android 音视频开发(二) – Camera1 实现预览、拍照功能 Android 音视频开发(三) – Camera2 实现预览、拍照功能 Android 音视频开发(四) – CameraX 实现预览、拍照功能 Android 音视频开发(五) – 使用 MediaExtractor 分离音视频,并使用 MediaMuxer合成新视频(音视频同步) 音视频工程 这章学习Android

夏至的稻穗的博客 1万+

Android之VirtualDisplay类简介

本文链接: Android之VirtualDisplay类简介 知识点: 1、屏幕截屏VirtualDisplay类简介; 2、VirtualDisplay类方法简介; 3、新名词记录{ Display:提供合理的显示器的像素密度和大小的信息。 Surface:处理需要在屏幕上显示的数据的承载器。 } 概览 VirtualDisplay类代表一个虚拟

姚镜堂 2万+

Android 层和屏幕

层和屏幕是两个基元,用于表示合成工作以及与屏幕硬件的交互。

qq_42015021的博客 745

Android Graphics 显示系统 - VirtualDisplay & mirrorDisplay 简单示例

上一篇文章,我们分享了一个VirtualDisplay的简单实例,主要是为了引入创建虚拟屏幕都使用了哪些APIs,参考。

向晚流年 1331

android 4.4 下使用 DisplayManager.createVirtualDisplay 录屏

本人最近做了一个关于android 4.4 下屏幕实时传输的项目。 主要使用DisplayManager.createVirtualDisplay 录屏,并将数据使用mediacodec 编码,socket传输;然后再mediacode解码显示 废话不多说,上代码。 MediaFormat format = MediaFormat.createVideoFor...

hedaibo88的博客 5667
上一篇: 安卓投屏之createVirtualDisplay相关flags参数的实战介绍
下一篇: ActivityRecordInputSink的触摸区域TouchRegion详细解读
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值