当前位置: 首页 > article >正文

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 time

import console_ctrl
import psutil


def start_scrcpy_recording():
    global pid,record_proc
    now_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.pid
      print("====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_name
    print("=====修改数据=====",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=0
    for 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.device
    filepath=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.kler.cn/news/368351.html

相关文章:

  • data_table_2 与 flutter 官方 DataTable 的区别
  • MYSQL作业三
  • 生成式 AI 与向量搜索如何扩大零售运营:巨大潜力尚待挖掘
  • 【前端】css样式
  • 利用前向勾子获取神经网络中间层的输出并将其进行保存(示例详解)
  • 系统架构设计师教程 第2章 2.6 计算机语言 笔记
  • Linux: Shell编程入门
  • 详解Redis相关缓存问题
  • Java中的反射(2)——调用构造方法和获取继承关系
  • shodan搜索引擎——土豆片的网安之路
  • <项目代码>YOLOv8路面病害识别<目标检测>
  • python中使用pymobiledevice3与手机交互(一)获取udid
  • 【C++】函数的返回、重载以及匹配、函数指针
  • 线程池(重要)
  • 位运算算法及习题 ,丢弃的数字 , 两整数之和 ,只出现一次的数字II
  • Java 线程池:深入理解与高效应用
  • C语言 | Leetcode C语言题解之第515题在每个树行中找最大值
  • 《Knowledge Graph Enhanced Multimodal Transformer for Image-Text Retrieval》中文校对版
  • NtripShare Cloud平台之CORS服务之基准站RTCM坐标编辑
  • Apache paino DML操作实战
  • Python数据分析——Numpy
  • Git快速上手
  • Java实现 itext PDF文件打印水印(文字和图片水印)
  • Vue前端开发:双向数据绑定之v-model与修饰符
  • 基于STM32的水产品运输监测系统设计与实现
  • 湖南(满意度调查)源点咨询 市场调研中定量调研方式的运用技巧