Android屏幕同步和录制工具
本帖已被设为精华帖!,
简介
atx是基于图像识别的自动化测试工具,里面也附带了一些其他的小工具,比如本文要介绍的Android屏幕同步显示和录制工具。
屏幕同步显示主要是将手机屏幕同步显示到电脑上,方便项目展示交流。atx的屏幕同步显示工具支持简单模式和交互模式,交互模式下还可以在电脑端来进行点击、滑动和一些按键操作。在屏幕旋转的时候同步窗口也会自动旋转。
屏幕录制是将屏幕变化记录到视频文件中,可以输出为avi或mp4格式的文件,输出视频的宽高尺寸是根据手机的宽高、缩放系数、按横屏或竖屏来确定,开始录制后,如果屏幕发生旋转,会自动缩放图片来适应视频尺寸,空白会以黑边填充。视频分辨率也是利用缩放系数来控制,更容易做到高清无码。
原理
截屏使用了openstf的minicap工具,minicap可以截取屏幕输出到标准输出,或者输出到socket。选择输出到socket然后转发到pc上,在pc端监听并解析消息,就可以得到相对比较实时的屏幕图像了,经测试,此方法同步图像的速度大致为30毫秒。图片展示用的opencv模块。
minicap启动的时候需要根据屏幕旋转方向来确定启动参数,如果已经启动之后,再旋转屏幕,会出现只显示一半图像的情况。为解决这个问题,使用了openstf的rotationwatcher来监听屏幕旋转,当发生屏幕旋转时重启minicap进程,重启耗时约1秒。
屏幕交互采用了minitouch来模拟点击和滑动操作,用adb shell sendevent 来模拟按键和键盘操作。minitouch也是通过socket和手机端连接,不断发操作指令过去。sendevent则是每次都需要通过adb子进程来发送指令,速度比较慢,此外用键盘输入也不能附带键盘状态(例如Shift),所以这边还有较大的限制,后续计划参考openstf的STFService来做改善。
录屏跟截屏一样使用的minicap,唯一增加的就是用opencv的VideoWrite不断将图像写入视频文件。写入时将fps限定在了24帧,虽然截屏是在后台进程,不需要考虑minicap的30毫秒限制(不过高于这个频率之后也没太大意义),但写入文件占用了一定时间,帧率太高会导致卡死。
使用
安装
安装了atx库之后,连接手机,先安装minicap
python -matx minicap
如果需要开启屏幕显示的交互,则还需要安装minitouch(最新版atx在安装minicap时会同步安装minitouch)
屏幕显示
python -matx screen
屏幕显示的可选参数和选项有:
- 缩放尺寸(–scale 或 -s),可以根据手机屏幕分辨率来调整,默认按照1080×1920的屏幕设置的0.5倍
- 关闭交互(–simple), 交互需要minitouch支持
屏幕录制
python -matx screenrecord
屏幕录制的可选参数和选项有:
- 缩放尺寸(–scale 或 -s), 同屏幕显示
- 输出路径(–out 或 -o), 默认值为out.avi
- 设置文件覆盖(–overwrite), 开启后如果输出路径已存在会强制覆盖
- 设置为竖屏方向(–portrait), 开启后会按照竖屏的尺寸输出为视频,适用于竖屏应用
- 设置关闭同步显示(–quiet 或 -q), 开启后不会同步显示当前手机画面的窗口
参考
- atx: https://github.com/codeskyblue/AutomatorX
- opencv: https://github.com/Itseez/opencv
- openstf-minicap: https://github.com/openstf/minicap
- openstf-minitouch: https://github.com/openstf/minitouch
- openstf-rotationwatcher https://github.com/openstf/RotationWatcher.apk
* 注:本文来自网络投稿,不代表本站立场,如若侵犯版权,请及时知会删除