视频卡顿分析之专利解读

部署运行你感兴趣的模型镜像

大家好,我是烤鸭:

   这篇主要是写一下视频卡顿分析,去年申请了专利,有一篇文章写了后半部分,这篇写一下前半部分,数据收集的部分。

前言

后半部分的文章:

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

GitHub - appium/appium-inspector: A GUI inspector for mobile apps and more, powered by a (separately installed) Appium server

配置 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

GitHub - appium/appium-inspector: A GUI inspector for mobile apps and more, powered by a (separately installed) Appium server

Appium 安卓自动化(Appium Inspector) - 简书

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烤鸭的世界我们不懂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值