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()
执行后录频信息如下