【Android】 屏幕录制screenrecord为什么这么快?

news2025/1/23 3:15:36

 背景

        正常的合成视频是个什么样流程? 主要有三大类方法:MediaMux硬解码,mp4parser,FFmepg三种方式详情传送门, 但是并不能把高帧率、分辨率屏幕视频实时保存下来  那么Android screenrecord命令是怎么做的呢?

一般的android图像流程

  图像流生产方

        图像流生产方可以是生成图形缓冲区以供消耗的任何内容。例如 OpenGL ES、Canvas 2D 和 mediaserver 视频解码器。

  图像流消耗方

        图像流的最常见消耗方是 SurfaceFlinger,该系统服务会消耗当前可见的 Surface,并使用窗口管理器中提供的信息将它们合成到屏幕。SurfaceFlinger 是可以修改所显示部分内容的唯一服务。SurfaceFlinger 使用 OpenGL 和 Hardware Composer 来合成一组 Surface。

其他 OpenGL ES 应用也可以消耗图像流,例如相机应用会消耗相机预览图像流。非 GL 应用也可以是使用方,例如 ImageReader 类。

  BufferQueue

        BufferQueues 是 Android 图形组件之间的粘合剂。它们是一对队列,可以调解缓冲区从生产方到消耗方的固定周期。一旦生产方移交其缓冲区,SurfaceFlinger 便会负责将所有内容合成到显示部分。

图像流

screenrecord做了什么

         现在我们了解了一般的android图像流程, 那么screenrecord做了什么: screenrecord 命令可让用户将屏幕上显示的所有内容作为一个 .mp4 文件记录在磁盘上。为此,系统从 SurfaceFlinger 接收合成的帧,将它们写入视频编码器,然后将已编码的视频数据写入一个文件。视频编解码器由单独的进程 (mediaserver) 进行管理,因此我们必须在系统中移动大量图形缓冲区。

        从触发screenrecord屏幕录制命令Surfaceflinger创建一个镜像主屏幕的虚拟屏幕(即它与主屏幕具有完全相同的层)并指示它将输出发送到来自 mediaserver 进程的 Surface。在这种情况下,SurfaceFlinger 是缓冲区的生产方,而不是使用方。

        配置完成后,screenrecord 会在编码数据显示时触发。在应用绘制时,其缓冲区会前往 SurfaceFlinger,SurfaceFlinger 将它们合成为单个缓冲区,然后直接发送到 mediaserver 进程中的视频编码器。screenrecord 进程从未出现完整的帧。在内部,mediaserver 进程具有自己的移动缓冲区的方式,这种方式还通过句柄传递数据,从而最大限度地降低开销。

参考资料

          1.screenrecord 命令源码  

          2.Android 图形框架

          3.Android中音视频合成的几种方案详析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1102079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【开发心得】Jaxb使用珠玑

前言 Java操作xml转换成javaBean,或者javaBean转换为xml的方式有很多。常见的有dom4j等工具直接操作dom,或者使用jaxb. jaxb介绍: JAXB(Java Architecture for XML Binding简称JAXB)允许Java开发人员将Java类映射为XML表示方式。JAXB提供两种主要特性:…

运动品牌如何做到“全都要”?来看看安踏的答案

文 | 螳螂观察 作者 | 易不二 运动鞋服是兼具高景气和清晰格局的优质消费赛道。 中信证券给出的这一预测,欧睿国际也做出了更具体的测算:预计到2027年,中国运动服饰市场规模有望以约为8.7%的年复合增长率,突破5500亿元人民币。…

零宽空格引发的问题

有人跟我反馈说有bug。 我说:啥bug? 对方说:刚申请的内部用户的账号登录不上去。 我说:还有这种事,报啥错? 登录的时候报了这个错: 我一看还好还好,跟上一次不一样的错&#xff…

有消息称苹果Vision Pro会有廉价版

据外媒爆料,苹果公司苹果正在研发的头显产品Vision Pro,将会有廉价版。据透露,这款产品预计售价在1500美元至2500美元之间,虽然仍不算低,但较现有的Vision Pro 3499美元的起售价,还是有明显降低。 透露廉价…

AcWing 5180. 正方形泳池

原题链接:5180. 正方形泳池 - AcWing题库 说实话题解和视频题解都不太好,有点过于复杂了,那就不得不记录一下我看视频题解衍生出的另一个较为简单的思路了。 根据答案形态出发,枚举所有这种形态找出最大值。 可以发现最大的泳池要…

十分钟了解IPv6升级改造安全优势

相信IPv6的地址数量优势已为大家熟知,丰沛的地址存量是IPv6被选作新一代网络承载协议并逐渐商用部署的根本驱动力。 然而IPv6协议相比于IPv4,不仅地址数量接近无限,还在网络安全性方面更胜一筹。本文将为您集中介绍IPv6的安全优势。 CSDN大…

微信小程序开发之flex布局及轮播图组件与后台Mock.js交互

目录 前言 一.flex布局 1.什么的flex布局 2.容器属性 2.1 flex-direction属性 2.2 flex-wrap属性 2.3 justify-content属性 特点: 二.轮播图 1.配置地址请求信息 2.通过方法加载轮播图数据 3.合法域名纠正 ​编辑 4.通过Mock.js模拟响应数据 5.轮播图前…

前端开发工具有哪些?17款前端工程师必备工具推荐!

软件开发是一个高度专业化的职业分工,根据所使用的编程语言的不同,会细分出多种岗位:前端开发、后端开发、客户端开发、iOS开发、Android开发、数据库开发等等,具体到每一个岗位,工作中常用的工具软件也存在着差别。 …

框架篇

一、Spring中的单例Bean是线程安全的吗 二、AOP相关面试题 三、Spring中的事务 四、Spring中事务失效的场景有 五、Spring bean的生命周期 六、Spring的循环依赖 七、SpringMVC的执行流程 八、自动配置原理 九、Spring框架常见的注解 十、Mybatis的执行流程 十一、MyBatis延迟加…

进阶JAVA篇- Lambda 表达式与 Lambda 表达式的省略规则

目录 1.0 什么是 Lambda 表达式? 1.1 既然跟匿名内部类相关,先来回顾匿名内部类。 1.2 Lambda 表达式与匿名内部类之间的关系。 1.3 函数式接口 1.4 在具体代码中来操作一下 2.0 Lambda 表达式省略规则 1.0 什么是 Lambda 表达式? Lambda 表达…

企业打造VR虚拟展厅,开启商务洽谈新时代!

现代化数字营销中,企业做了虚拟线上展厅和不做虚拟展厅的对比是很明显的,VR虚拟展厅让企业产品、企业环境、企业实力的展示更加真实、直观。虚拟展厅是一种在线展示企业形象和品牌的新型方式,随着VR技术的发展,虚拟展厅正在逐步取…

户外暴晒测试系统太阳光模拟器

概述 户外暴晒测试系统太阳光模拟器是一种设备,用于模拟太阳光以测试和评估材料、产品或设备在户外的耐久性和性能。它由光源、光学系统、试样台和控制系统组成。通过调整参数,模拟不同时间、地点和季节的太阳光条件,对样品进行长时间暴晒&a…

【LeetCode刷题(数据结构与算法)】:用队列实现栈

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty) 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶 int pop() 移除并返回栈顶元素 int top() 返…

python版李相夷

1、我们绘制原图是这张lxy.jpg 2、具体代码如下 运行python main.py lxy.jpg就可以实现绘制过程了!(可能会比较慢) # -*- coding: utf-8 -*-import turtle as te from bs4 import BeautifulSoup import argparse import sys import numpy a…

【Linux】Linux常用指令

ls指令(对属性操作,查看文件相关属性) 用法:ls[选项][目录或文件] 功能:1. 对于目录,该命令列出该目录下的所有子目录和文件。2. 对于文件,将列出文件名以及其他信息。 常用选项: …

jmeter 解决查看结果树响应内容中文乱码问题

jmeter 解决查看结果树响应内容中文乱码问题 查看结果树中,接口响应内容中,包含中文,显示乱码; 临时解决方法,添加BeanShell 后置处理程序,添加内容prev.setDataEncoding("utf-8"); 运行压测…

矫正图片背景

在利用明场或荧光显微镜成像时,往往会由于样品厚度不一、镜头污渍或者光照不均等因素,降低图片质量,从而影响分析以及展示。 这篇文章就为大家介绍:怎样利用 ImageJ 对图片进行背景校正,包括两个方面:白平…

前端跨域问题解决

一、同源策略 同源策略是一个重要的安全策略,它用于限制一个Origin的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。 Origin:指web文档的来源,Web 内容的来源取决于访问的U…

数据结构: 二叉搜索树

目录 1.二叉搜索树概念 2.二叉搜索树的操作 3.二叉搜索树的实现 3.1定义BST 3.2功能实现 1.默认成员函数 2.非递归 插入 查找 删除 3.递归 插入 查找 删除 4.二叉搜索树的应用 1.二叉搜索树概念 二叉搜索树又称二叉排序树,它可以是一棵空树&#xff…

Java连接PostGreSql

本次试验怎么用jdbc连接PostGreSql数据库。首先需要安装一个pgsql数据库,安装就不介绍了。安装后自己用SQL创建表,如有下图的库和表,怎么用java带SQL参数连接他取的数据。 PG库下载地址 首先到官网上根据自己的Java版本下载jdbc驱动jdbc下载…