Python实现Android设备录屏功能及停止录屏功能

1、功能概述?

提供源码下载

之前通过ADB命令实现了实时的录屏功能。但是很遗憾,虽然通过adb命令录屏非常方便,但由于权限限制,无法在安卓系统较高的设备上使用。现选择使用另一开源工具来解决这一问题,并记录使用详细过程。

本文主要实现录屏及停止录屏功能,实测有效。

2、安装ADB服务?

录屏服务需要依赖adb,所有需要先安装adb服务

Android SDK Platform-Tools 是 Android SDK 的一个组件。它包含与 Android 平台进行交互的工具,主要是 adb 和 fastboot。通过adb这个服务,我们可以识别加载Android系统,并执行相对应的操作如:查询运行的设备、运行设别的名称版本等。

2.1、下载SDK Platform-Tools

点击下面的地址,同意服务,就能自动下载

官方下载地址:
https://developer.android.google.cn/tools/releases/platform-tools?hl=zh-cn#downloads

2.2、将安装包解压到你的电脑中

我们主要使用的就是这个abd.exe的服务

2.3、配置adb的环境变量

右击”此电脑”->选择”属性”->点击”高级系统设置”->在弹框中选择”高级”->点击”环境变量”

双击”PATH”->点击”新建”->将adb的路径配置进去(就是解压的那个路径)

2.4、测试adb是否安装成功

这里如果连接真机,就通过usb线连接后,打开手机的开发者模式,打开USB调试,将USB配置选择为MIDI或者MTP多媒体传输等。

测试命令:adb devices

3、下载安装SCRCPY服务

本服务支持Windows\macos\linux

本文章只要使用scrcpy开源工具进行录屏

3.1、服务下载地址

https://github.com/Genymobile/scrcpy

对应的系统版本中都有安装和常用的命令

按照操作系统的位数进行下载合适的版本

 3.2、其他系统安装方式

【macOS系统安装方式】

brew install scrcpy

【Linux系统安装方式】

apt install scrcpy

 3.3、scrcpy快速使用-实时投屏功能

解压后直接点击目录中的scrcpy.exe即可默认加载Android设备

  

实时屏幕共享如下:

  

 4、Python中实现录屏及停止录屏

 4.1、在python中安装依赖服务

执行命令: pip install console-ctrl

作用:用于通过pid停止录屏功能

  

 4.2、在Python中创建脚本实现录屏

核心命令解释:

scrcpy -s 587847ef  --record  D:/files/999.mp4  --no-display  --no-window

-s 587847ef:表示指定录屏设备,通过adb命令能够查看到设备名称

--record  D:/files/999.mp4:表示录制的视频放置在D:/files目录中

--no-display:录屏的时候不打开镜像

--no-window:不显示窗体

--no-display   --no-window:能够实现录屏的时候不弹出任何的窗口提示

import datetime
import os
import subprocess
import timeimport console_ctrl
import psutildef start_scrcpy_recording():global pid,record_procnow_time = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')path = 'D:/files/video_{}.mp4'.format(now_time)# 指定需要录频的设备device_id = "587847ef"# 切换目录,这个目录是scrcpy的解压目录os.chdir("C:/Users/Administrator/Desktop/scrcpy-win64-v2.7")# 执行录频命令command = f"scrcpy -s 587847ef  --record D:/files/999.mp4 --no-display  --no-window"try:def 录屏并回传视频_scrcpy(name,casename,deviceName):name = str(name)file_name = name[name.rfind("\\") + 1:len(name) - 10] + datetime.datetime.now().strftime("%Y%m%d%H%M%S") + ".mp4"filepathoriginal = 获取文件存储路径()filepath = str(filepathoriginal).replace("/", "\\")print("=====filepath11===",filepath)# 切换目录,这个目录是scrcpy的解压目录currentPath=os.getcwd()os.chdir("C:/scrcpy-win64-v2.7/scrcpy-win64-v2.7")print("==========5====filename====",file_name)# 执行录频命令command = f"scrcpy -s {deviceName}  --record {filepath}/{file_name} --no-display   --no-window"try:record_proc = subprocess.Popen(command,shell=True,creationflags=subprocess.CREATE_NEW_CONSOLE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)pid=record_proc.pidprint("====scrcpy 命令执行成功======",record_proc.pid)except  subprocess.CalledProcessError as e:print("================程序异常==================")print(f"scrcpy 命令执行失败,错误代码: {e.returncode}")# 4、将视频信息添加到数据库中targetfilepath = "E:/hazq/executiveprocess/" + datetime.datetime.now().strftime("%Y%m%d") + "/" + file_nameprint("=====修改数据=====",name[name.rfind("\\") + 1:len(name) - 10])修改用例执行视频结果(name[name.rfind("\\") + 1:len(name) - 10], casename, targetfilepath,str(pid),filepathoriginal)#print("=============录屏并回传成功=============")# 路径切换成原始路径os.chdir(currentPath)# 通过遍历判断,在剩余空间较大的盘符创建文件夹存储文件。
def 获取文件存储路径():diskinfos = psutil.disk_partitions()maxfreediskname=""maxfreediskspace=0for diskinfo in diskinfos:disk=psutil.disk_usage(diskinfo.device)free_space = disk.free/(1024*1024*1024)if(float("{:.2f}".format(free_space))>float(maxfreediskspace)):maxfreediskspace = float("{:.2f}".format(free_space))maxfreediskname = diskinfo.devicefilepath=maxfreediskname.replace("\\","/")+"hazqocr/executiveprocess"filepath = filepath + "/" + datetime.datetime.now().strftime("%Y%m%d")if not os.path.exists((filepath)):os.makedirs(filepath)print("目录创建成功:", filepath)else:print("目录已存在:", filepath)return filepath# 停止录屏函数
def closeEvent():if record_proc:if record_proc.poll() is None:console_ctrl.send_ctrl_c(pid)if __name__ == '__main__':start_scrcpy_recording()

执行后录频信息如下

  

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorh学习笔记——cifar10(六)MobileNet V1网络结构

基础知识储备: 一、深度可分离卷积(Depthwise Separable Convolution) MobileNet的核心是深度可分离卷积(Depthwise Separable Convolution),深度可分离卷积是卷积神经网络(CNN&#xf…

Java 基于 poi 和 itextpdf 实现 excel 转 pdf

目录 问题 实现思路 pom Excel2PDFUtil Excel2PDFUtilTest 输出结果 问题 工作中遇到一个需求,需要实现 excel 文件的预览,实现的思路就是将 excel 转成 pdf 文件,上传到文件服务器上得到文件地址,预览时只需要返回 pdf 预…

UHF机械高频头的知识和待学习的疑问

电路图如上所示: 实物开盖清晰图如下: 待学习和弄懂的知识: 这是一个四腔的短路线谐振。分别是输入调谐,放大调谐,变频调谐和本振 第一个原理图输入为75欧(应该是面向有同轴线的天线了)如下图…

【vue+leaflet】自定义控件(五)

老规矩, 一健三连, 先赞后看 先看效果图 自定义控件: 支持和自带控件有相同的增删改查功能, 处理与自带控件来回切换,互相使用的部分问题 新建一个组件 imgControl.vue 1, html 没什么东西,就一个div盒子装leaflet图层 <template><div class"imgBox">…

Java | Leetcode Java题解之第513题找树左下角的值

题目&#xff1a; 题解&#xff1a; class Solution {public int findBottomLeftValue(TreeNode root) {int ret 0;Queue<TreeNode> queue new ArrayDeque<TreeNode>();queue.offer(root);while (!queue.isEmpty()) {TreeNode p queue.poll();if (p.right ! nu…

Cursor的composer和chat的应用

提到 Cursor 就不得不提及它的 Composer 功能。“Composer” 的中文释义为 “作曲家”&#xff0c;在此处它有着特定的含义。 Cursor 提供了两种人机对话方式。一种是 Chat&#xff0c;它与 ChatGPT 之类的工具差别不大。另一种则是强大的 Compose。 在编写程序时&#xff0c…

基于GA遗传优化的风光储微电网削峰填谷能量管理系统matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 削峰填谷的基本概念与意义 4.2 GA优化 5.完整工程文件 1.课题概述 基于GA遗传优化的风光储微电网削峰填谷能量管理系统matlab仿真。通过遗传算法优化风光储微电网的充放电控制过程&#xff0c;然后…

配置smaba (Linux与windows通信)

在Ubuntu上安装Samba是一个简单的过程。以下是详细的步骤&#xff0c;帮助你从安装到基本配置。 步骤1&#xff1a;更新软件包列表 首先&#xff0c;打开终端&#xff0c;确保你的软件包列表是最新的&#xff1a; sudo apt update 步骤2&#xff1a;安装 Samba 接下来…

项目部署 —— 前端、后端

一、 前端 ● 二号标题 在命令框里输入 npm run build 打包成功&#xff1a; 项目就会出现一个 dist 文件夹 将Linux的nginx文件夹中&#xff0c;重命名为 news 二、 后端 ● 通过maven打包后端程序 最终会在项目中生成一个 target 文件夹&#xff0c;将 news-1.0-SNAPSHOT.…

汇编语言

前言 汇编语言是各种CPU提供的机器指令的助记符的集合&#xff0c;可以通过汇编语言直接控制硬件系统进行工作&#xff1b; Q&#xff1a;为什么说汇编语言可以直接操作硬件&#xff1f;那么汇编过程还有什么意义呢&#xff1f; A&#xff1a;汇编语言利用助记符代替机器指令的…

Python数据分析——Numpy

纯个人python的一个小回忆笔记&#xff0c;当时假期花两天学的python&#xff0c;确实时隔几个月快忘光了&#xff0c;为了应付作业才回忆起来&#xff0c;不涉及太多基础&#xff0c;适用于有一定编程基础的参考回忆。 这一篇笔记来源于下面哔哩哔哩up主的视频&#xff1a; 一…

反编译华为-研究功耗联网监控日志

摘要 待机功耗中联网目前已知的盲点&#xff1a;App自己都不知道的push类型的被动联网、app下载场景所需时长、组播联网、路由器打醒AP。 竞品 策略 华为 灭屏使用handler定时检测&#xff08;若灭屏30分钟内则周期1分钟&#xff0c;否则为2分钟&#xff09;&#xff0c;检…

基于知识图谱的紧急事故决策辅助系统

现代社会紧急事故频发&#xff0c;而处理这些突发事件的效率直接决定了后续影响的大小。这时候&#xff0c;数据智能的解决方案会显得尤为重要&#xff01;今天为大家分享一个用【知识图谱】技术驱动的紧急事故决策辅助系统&#xff0c;不仅能帮助你快速处理事故信息&#xff0…

HarmonyOS Next API12最新版 端云一体化开发-云函数篇

一、新建一个端云一体化项目 见文章&#xff1a; HarmonyOS NEXT API12最新版 端云一体化开发-创建端云一体化项目流程_鸿蒙appapi-CSDN博客 二、官方文档 使用限制-云函数 - 华为HarmonyOS开发者 (huawei.com) Cloud Foundation Kit简介-Cloud Foundation Kit&#xff0…

1通道10GSPS或2通道5G 14 bit数字化仪

ADQ7DC是一款高端14位数据采集平台&#xff0c;旨在满足最具挑战性的测量环境。ADQ7DC特性: 单通道和双通道操作 单通道10GSPS或双通道5GSPS 7 GByte/s持续数据传输速率开放式FPGA支持实时DSP 脉冲检测固件选项波形平均固件选项 ADQ7DC数据手册 特征 单通道和双通道工作模式…

javaScript整数反转

function _reverse(number) { // 补全代码 return (number ).split().reverse().join(); } number &#xff1a;首先&#xff0c;将数字 number 转换为字符串。在 JavaScript 中&#xff0c;当你将一个数字与一个字符串相加时&#xff0c;JavaScript 会自动将数字转换为字符串…

Ajax:跨域 JSONP

Ajax&#xff1a;跨域 & JSONP 同源与跨域同源跨域 JSONPjQuery发送JSONP 同源与跨域 同源 如果两个页面的协议、域名、端口号都相同&#xff0c;则两个页面同源 例如&#xff1a; http://www.test.com/index.html与其同源的网页&#xff1a; http://www.test.com/other…

MySql中表的复合查询

复合查询 ​ 本篇开始将介绍在MySql中进行复合查询的操作。平时在开发过程中只对一张表进行查询的操作是远远不够的&#xff0c;更多的都是多张表一起查询&#xff0c;所以本篇将介绍多张表中的复合查询&#xff0c;主要介绍多表查询、自连接以及子查询。 文章目录 复合查询导…

Discourse 是否可以简化文本操作

当下的文本处理很多都在慢慢转换到 MD。 有一段时间&#xff0c;论坛都会使用默认的 BBCode&#xff0c;包括 Discuz 现在也是这样的。 MD 文件有一定的入门使用门槛&#xff0c;但习惯了还好。 我们这里用得最多的就是标题和图片&#xff0c;其他的排版用得比较少&#xff…

如何找到适合的工程管理系统?9款对比

本文推荐的9款精选工程项目综合管理系统有: 1. Worktile&#xff1b;2. 广联达&#xff1b;3. 斯维尔&#xff1b;4. 品茗工程管理软件&#xff1b;5. 明源云&#xff1b;6. 泛微OA&#xff1b;7. Microsoft Project&#xff1b;8. Procore&#xff1b;9. Buildertrend。 在管理…