大家好,我是烤鸭:
这篇主要是写一下视频卡顿分析,去年申请了专利,有一篇文章写了后半部分,这篇写一下前半部分,数据收集的部分。
前言
后半部分的文章:
chatgpt驱动的视频卡顿分析.md_gpt卡顿-优快云博客
专利截图:

技术环境
安卓机型、windows系统
adb、scrapy、appium
java环境
安卓环境(SDK 平台工具版本说明 | Android Studio | Android Developers)
node环境(Node.js — 在任何地方运行 JavaScript)
python环境
流程说明
使用客观指标代替主观印象。
1、 模拟用户行为(播放器的用户行为,快速滑动、拖拽)
2、手机用户行为数据(用户行为的录屏视频)
3、分析数据(使用卡顿分析算法对录屏视频进行分析)
4、汇总数据(数据结果平台化,方便观测一段时间的趋势)
模拟用户行为
1、安装appium
Install Appium - Appium Documentation

或者使用桌面版:
GitHub - appium/appium-desktop: Appium Server in Desktop GUIs for Mac, Windows, and Linux
如果报下面这个错误,检查一下anroid_home配置的对不对。

启动appium

2、python代码调用
from appium import webdriver
import time
# 配置 Desired Capabilities
desired_caps = {
"platformName": "Android",
"platformVersion": "14.0",
"automationName": "UiAutomator2",
"deviceName": "xxxxx",
"appPackage": "com.xingin.xhs",
"appActivity": ".activity.SplashActivity",
"noReset": True,
"unicodeKeyboard": True,
"resetKeyboard": True
}
# 初始化 WebDriver
driver = webdriver.Remote("http://localhost:4723", desired_caps)
# 等待一段时间,确保应用加载完成
time.sleep(5)
# 获取屏幕截图并保存
driver.save_screenshot("E:\\my\\my-blog\\视频\\python-cv\\2-adb录屏\\screenshot.png")
# 关闭应用
# driver.close_app()
# 关闭 WebDriver
driver.quit()
如何获取 appPackage 和 appActivity
# cmd 窗口执行
adb shell
dumpsys window|grep mCurrentFocus
# 输出如下
star:/ $ dumpsys window|grep mCurrentFocus
mCurrentFocus=null
mCurrentFocus=Window{7a497dd u0 com.xingin.xhs/com.xingin.xhs.index.v2.IndexActivityV2}
由于需要模拟用户行为,所以需要进一步抓取元素。
3、安装 appium-inspector
配置 Capability
{
"platformName": "Android",
"appium:platformVersion": "14.0",
"appium:automationName": "UiAutomator2",
"appium:deviceName": "Your device",
"appium:appPackage": "com.xingin.xhs",
"appium:appActivity": ".index.v2.IndexActivityV2",
"appium:noReset": true,
"appium:unicodeKeyboard": true,
"appium:resetKeyboard": true,
"appium:forceAppLaunch": true
}
我们想实现的功能是找到视频,点击进入并实现滑动。
利用inspector找到播放器图标元素的id,点击进入,循环滑动翻页。

# 初始化 WebDriver
driver = webdriver.Remote("http://localhost:4723", desired_caps)
# 启动应用
# driver.launch_app()
# 等待一段时间,确保应用加载完成
time.sleep(5)
# 查找元素并点击
# 使用 resource-id 获取所有匹配的元素
elements = driver.find_elements(By.ID, "com.xingin.xhs:id/ee3")
# 通过索引选择特定的元素
# 实现向上滑动翻页
def swipe_up(driver, duration=1000):
"""
向上滑动翻页
参数:
- driver: WebDriver 实例
- duration: 滑动持续时间,单位为毫秒,默认为 1000ms
"""
# 获取屏幕的宽高
width = driver.get_window_size()["width"]
height = driver.get_window_size()["height"]
# 计算滑动起始和结束的坐标
start_x = width / 2
start_y =height * 0.8
end_y = height * 0.2
driver.swipe(start_x, start_y, start_x, end_y, duration)
if len(elements) > 0:
target_element = elements[0] # 选择第一个匹配的元素
target_element.click()
# 等待一段时间,确保元素被点击
time.sleep(2)
# 模拟用户滑动, 实现向上滑动翻页, 循环10次
for i in range(10):
swipe_up(driver, 300)
time.sleep(2)
else:
print("未找到匹配的元素")
# 获取屏幕截图并保存
driver.save_screenshot("E:\\my\\my-blog\\视频\\python-cv\\2-adb录屏\\screenshot.png")
# 关闭应用
# driver.close_app()
# 关闭 WebDriver
driver.quit()
4、使用 scrapy 将视频播放录屏,用于后续分析
如果使用手机自带的录屏,没办法将文件保存到电脑上,而且会比较卡顿(依赖手机性能),所以这里使用一个开源工具 GitHub - Genymobile/scrcpy: Display and control your Android device
可以把手机屏幕投屏到电脑上,并且可以实现实时操作,还提供了API可以录屏
scrcpy --record=E:\\file.mp4
使用python脚本在进入视频页面后,开启录屏
if len(elements) > 0:
target_element = elements[0] # 选择第一个匹配的元素
target_element.click()
# 等待一段时间,确保元素被点击
time.sleep(2)
# 定义命令
command = ["E:\\dev\\env\\scrcpy\\scrcpy.exe", "--record=E:\\file.mp4"]
# 使用 subprocess.Popen 执行命令,并捕获输出
process = subprocess.Popen(
command,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
encoding="utf-8" # 设置输出编码为 UTF-8
)
# 等待命令执行完成(可选)
# process.wait()
print("命令已启动,scrcpy正在运行...")
# 模拟用户滑动, 实现向上滑动翻页, 循环3次
for i in range(3):
swipe_up(driver, 300)
time.sleep(0.1)
process.kill()
print("命令执行停止")
else:
print("未找到匹配的元素")
贴一下录屏demo
python scrcpy自动化测试录屏
文章参考
ADB安装及使用详解(非常详细)从零基础入门到精通,看完这一篇就够了-优快云博客
adb常见异常处理_adb devices 找不到设备-优快云博客
GitHub - Genymobile/scrcpy: Display and control your Android device
3万+

被折叠的 条评论
为什么被折叠?



