skia实现动态差异录屏截图logo添加-千里马SurfaceFlinger专题实战项目背景介绍

Android 屏幕录制时去除悬浮窗 最近在用Android8.0开发一个屏幕录制的功能,要求录制的视频不能有录屏的控制悬浮窗。 录屏方案使用的是MediaRecorder、MediaProjection、VirtualDisplay。 Android支持多个屏幕:主显、外显、虚显,虚显就是VirtualDisplay。 VirtualDisplay的使用场景很多,比如录屏,WED显示等。其作用就是抓取屏幕上显示的内容。 录屏... 阅读详情

项目背景

hi,粉丝朋友们:
大家好!因为前面一直忙于讲解surfaceflinger层面到的原理和源码分析部分,一直没有一个系统的项目来给大家练手实现,今天来实现一个sf层面的一个小项目。具体项目背景信息如下:
在这里插入图片描述
实现要求:
1、需要在截图时候有一个品牌logo
2、需要在投屏,录屏时候有品牌logo
3、手机画面不可以展示logo

项目需求分析

方案1(想不修改框架,直接应用层面实现):

一些同学可能会截图logo那不是很简单么,获取到了截图图片后再进行,绘制logo重新保存成带有logo图片既可以

在这里插入图片描述针对录屏也一样可以获取没有logo的mp4文件,然后对mp4文件进行水印添加保存

这种方案基本上明显不可行。。。。
相当于获取截图都是没有logo的还需要额外处理后才可以,达不到要求,因为用户依然可以获取没有logo图片或者录屏,速度慢,而且也没有办法针对投屏场景实现

综上:不修改sf框架等基本上是不可能可以实现该需求的,针对很多新手小白同学不知道framework具体做啥,是不是上面这个需求就要求你一定要深入了解系统,修改系统才可以实现。这些需求其实都是平常rom开发很常见的部分。

方案2(修改sf和framework合格方案)

具体方案如下图所示
在这里插入图片描述
总体思路就是上图所说的,需要对针对skia,或者opengl渲染时候进行hook,然后添加上自己的logo既可以,当然实现这个需求,必须要求你对surfaceflinger代码和framework的wms的代码非常熟悉才可以搞定,具体实现代码和详细方案可以看我视频哈

实现成果展示:

用户看到的手机画面,可以看到是完全没有logo的:
在这里插入图片描述

接下来看看截图场景:
在这里插入图片描述
明显看到截图后右下角带有了定制logo

再看看投屏情况:
在这里插入图片描述

可以看到投屏情况下一直右下角也有个logo

更多framework干货请关注“千里马学框架”

SurfaceFlinger详解 Surface进行merge可以采用两种方式,一种就是采用软件的形式来merge,还一种就是采用硬件的方式,软件的方式就是我们的SurfaceFlinger,而硬件的方式就是Overlay。 SurfaceFlinger 是一个独立的Service, 它接收所有Window的Surface作为输入,根据ZOrder, 透明度,大小,位置等参数,计算出每个Surface在最终合成图像中的位置,然后交由HWComposer或Ope... 阅读详情

相关推荐

Android图形渲染框架

Android图形渲染框架包括:Gralloc分配缓冲区,BufferQueue作为缓冲队列连接生产者与消费者,可以使用TextureView、SurfaceView和GlSurfaceView

徐福记456 2万+

SurfaceFlinger实战dump获取单个Layer图像方案及成果展示-千里马学框架

今天来给大家分享一下如何实现单独获取某个Layer的图片,而不是整个屏幕的图片。

learnframework的博客 3018

安卓Android源码——ScreenShot.zip

安卓Android源码——ScreenShot.zip

hal/SurfaceFlinger/perfetto实战需求问题探讨作业-千里马framework开发

截图分享可以选定某个特定窗口进行,这个和上面的录屏其实基本上类似一个场景,就是截图时候有会存在只需要截图固定窗口window的,不需要其他window的情况,同样游戏主播进行直播这个情况,截图时候希望只有游戏画面就可以,游戏画面上面的其他app的窗口不希望在截图中。经常分析一些显示问题时候,会想要dumpsys各个图层,但是dumpsys SurfaceFlinger命令一般来说只是有相关的图层信息,是文本类的信息,所以有时候黑屏或者显示 异常情况就比较难看出来是不是自己图层本身上帧有问题。

learnframework的博客 1498

【学习K230-例程46】GT6700-UVC摄像头

UVC模块提供了USB摄像头的检测、配置和图像采集功能,支持单摄像头操作。本实验通过开发板上的USB接口连接摄像头,将摄像头捕获到的画面显示在显示设备上。print(f"模式{i}: {mode.width}x{mode.height} {mode.format}@{mode.fps}fps")print(f"摄像头检测: {‘已连接’ if plugin else ‘未连接’}, 设备信息: {devinfo}")检测系统是否连接了USB摄像头(当前仅支持单个摄像头检测)。获取摄像头支持的所有视频模式。

GilgameshJSS的博客 807

openvpn 安装 (Alibaba Cloud Linux release 3 (Soaring Falcon))

1.错误:configure: error: libnl-genl-3.0 package not found or too old. Is the development package and pkg-config (/usr/bin/pkg-config) installed?# ta.key在/etc/openvpn/server/目录下可以如下配置,否则需要写完整路径。# 配置账号密码登录客户端需要ca证书(可选)# 证书校验算法 配置上面生成的完整路径。# ca证书 配置上面生成的完整路径。

dubhe_zhao的博客 2149

通过 dumpsys SurfaceFlinger 分析Android 系统图层

一、通过 dumpsysSurfaceFlinger 分析Android 系统图层: 从下面的dumpsys log看出当前系统有三个图层(红色部分是每个图层的坐标和大小),从最底层到上层分别是ImageWallpaper(壁纸), SurfaceView(视频小窗口), launcher(桌面)。其中视频小窗口用Overlay的方式独立输出到视频层,这样的话只有壁纸层和桌面层通过GPU混合后输

haima1998的专栏 1万+

Vivado项目开发新思路:用VSCode写代码,用Vivado管理IP核与综合(Windows/Mac环境通用指南)

本文介绍了如何结合Vivado和VSCode的优势,打造高效的FPGA设计工作流。通过配置VSCode的Verilog插件和Vivado环境集成,开发者可以在VSCode中编写代码,同时利用Vivado管理IP核与综合,显著提升开发效率和团队协作体验。

weixin_42545503的博客 337

试验SurfaceFlinger 中Source Crop

在创建图层时,我们可以通过设置组件的 SurfaceHolder 或者 SurfaceTexture 等对象的 Source Crop 属性来指定图层的裁剪区域,从而实现对图层的缩放和裁剪等操作。需要注意的是,在设置 Source Crop 属性时,我们使用了 SurfaceHolder 的 setFixedSize() 方法来指定目标区域的尺寸。通过setFixedSize可以设置绘制的大小,这里我们进行测试,在一个activity中准备3个按钮,点击按钮来绘制不同大小的画布,看看效果。

aaajj的专栏 2572

ENVI5.6 自动化流程:GF系列卫星影像批处理与质量优化

本文详细介绍了如何利用ENVI5.6构建针对GF-2、GF-6、GF-7系列卫星影像的自动化批处理流水线。通过配置Batch Processing工具,实现从正射校正到图像融合的全流程批量处理,并分享参数设置、质量监控与故障排查的实战经验,旨在显著提升海量遥感影像的处理效率与成果质量。

efc1234567的博客 603

华为OD机考真题 新系统 - 小菊的寻宝之旅(Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【小菊的寻宝之旅】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【小菊的寻宝之旅】多语言题解。

qq_45776114的博客 622

android surfaceflinger 代码,Android SurfaceFlinger服务(三) ----- 本地图层Layer创建(示例代码)...

在上一篇文章中,主要分析了Surface的创建过程,对于Layer图层的创建并没有深入跟踪分析。这篇文章将分析Layer图层的创建,并分析handle gbp这两个变量的来源。在SurfaceFlinger中会根据flags的值创建不同的layer。这里主要以创建普通layer为例进行分析。status_t SurfaceFlinger::createNormalLayer(const sp&am...

weixin_42411003的博客 352

塔石DTU通过MQTT传递数据教程

塔石通过MQTT通讯上传ADL400电表用电量。

renkai721的专栏 253

Android SurfaceFlinger服务(三) ----- 本地图层Layer创建

在上一篇文章中,主要分析了Surface的创建过程,对于Layer图层的创建并没有深入跟踪分析。这篇文章将分析Layer图层的创建,并分析handle gbp这两个变量的来源。 在SurfaceFlinger中会根据flags的值创建不同的layer。这里主要以创建普通layer为例进行分析。 status_t SurfaceFlinger::createNormalLayer(const ...

weixin_39421817的博客 874

实现两端固支梁热力耦合的有限元分析

在本文中,我们将使用Matlab实现两端固支梁的热力耦合有限元分析。我们假设梁的材料是均匀的,梁的截面积为1,长度为1,两端固支,且受到均匀分布的热荷载。接下来,我们需要组装全局刚度矩阵和热传导矩阵。对于两个相邻的元素,它们共享一个节点,因此需要使用连接矩阵将局部矩阵组装成全局矩阵。接下来,我们需要定义元素刚度矩阵和热传导矩阵。然后,我们需要定义载荷向量。然后,我们需要定义边界条件。在这个例子中,梁的两端固支,因此我们需要将两端节点的位移限制为0。最后,我们需要解决线性方程组,得到节点的位移和温度分布。

CyberSparkZ的博客 396

美军利用MANET技术实现无人作战单元协同作战

本文首先介绍了移动自组织网络 (MANET)以及Wave Relay®波形中继技术,并探讨了波形中继MANET平台在美空军ABMS项目等军事方面的运用情况。

guanyifu9的博客 853

Android Framework最难模块WMS实战作业-手机车机系统开发必备

0-课程整体介绍1-window-container.mp4 窗口层级树实战启动篇2-displayarea-feature.mp4 窗口层级树源码分析相关3-displayarea-draw-feature.mp4 窗口层级树绘制实战14-displayarea-draw-leaf.mp4 窗口层级树绘制实战25-displayarea-draw-leaf-2.mp4 窗口层级树绘制实战3。

learnframework的博客 4311

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android 禁止截屏录屏

禁止截屏录屏功能

tq501501的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Android SurfaceFlinger导读(07)理解HWComposer

本章节思维导图如上。主要从7个方面讲述了HWC的概念,这里 主要关注 HWC的流程、功能、效率。1 HWC概述HWC(hwcomposer)是Android中进行窗口(Layer)合成和显示的HAL层模块(注意:不是SurfaceFlinger代码中HWcomposer这个类),通常由显示设备制造商 (OEM)实现并完成,为服务提供硬件支持。2 为什么使用HWC可以使用OpenGL ES合成Layer,这需要占用并消耗GPU资源。大多数GPU都没有针对图层合成进行优化,因此当。

wangdsh的博客 9915

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

learnframework的博客 1797

Android图形显示系统——下层显示4:图层合成上(合成原理与3D合成)

Android显示之图层合成 要点 1.图层合成指综合各个窗口的绘制内容,送往LCD显示的过程。从原理上可分为在线合成与离线合成两种方式。 2.在Android的SurfaceFlinger代码流程中,图层合成方式分3D合成(OpenGL)和硬件合成两大类。 3.图形系统采用垂直同步Vsync机制,由LCD上报vsync,触...

weixin_34197488的博客 1357

systrace学习笔记

7.渲染线程首先需要从BufferQueue里面取一个Buffer(dequeueBuffer),进行数据处理之后,调用OpenGL相关的函数,真正地进行渲染操作,然后将这个渲染好的Buffer还给BufferQueue(queueBuffer),SurfaceFlinger在Vsync-SF到了之后,将所有准备好的Buffer取出进行合成(这个流程在讲SurfaceFlinger的时候会提到)6.第六阶段:最终合成好的数据放到屏幕对应的FrameBuffer中,固定刷新的时候就可以看到了。

梦风心雨的博客 1671

车载手机系统开发面试福利:安卓framework开发面试题目-某公司真题带面试者答案

他还给大家记录了当时如何回答面试题目的,大家可以看看下面的详细面试题,当然学员的不一定回答的非常全面和百分百正确,这里大家可以进行讨论留言等,后期整理更加完善的汇总到vip群中。-运行时可以查看到CPU的信息,已经线程在CPU中的优先级 Priority 一般应用都是110,当前CPU执行时大核小核,以及CPU频率。3.判断需要显示的窗口,是否提交到合成中,以及相关属性是否异常,经常查看都就是透明度,裁剪crop,Visible,覆盖,父节点。

learnframework的博客 1274

android之利用surfaceView实现自定义水印相机

android之利用surfaceView实现自定义水印相机 知识点 1、自定义相机+预览相机 2、截屏拍照加水印 3、关于不使用intent来传输图片 俗话说,有图有真相。很多人都是喜欢直接看图,不像我,比较喜欢文字多点,经常看看散文什么的陶冶一下情操。 好了,说到这里,就引出我们今天要做的这个功能,那就是水印相机。水印相机说白了,就是在拍照的图片上面加上自己想要的各种信息,

姚镜堂 1万+
上一篇: HAL/SurfaceFlinger专题之HWC和GPU合成部分更新通知
下一篇: MirrorLayer可以正常触摸屏幕原理分析
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

千里马学框架

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

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

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

打赏作者

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

抵扣说明:

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

余额充值