测试基础 视频流技术为手机远程租用带来全新体验——解决 minicap 痛点

opentest-oper@360.cn · 2018年12月13日 · 最后由 Byb 回复于 2020年03月27日 · 18228 次阅读

一、真机租用

360 开测真机租用:真机租用是一个云手机平台,用户可以远程操控真机,平台提供了常用的安装、截图、logcat、adb shell、远程调试等功能。

二、问题概述

真机租用的图片与点击功能使用的是 stf 提供的两个工具 minicap 与 minitouch。
当 Android P 系统发布时,由于 minicap 还未发布针对 Android P 版本的 minicap 与 minitouch 文件,导致所购新机无法及时上线供测试者使用。
注:两款工具的使用都和系统版本有关,不同 Android 版本对应于不同的工具文件,为解决上述严重依赖问题,我们进行了以下分析。

三、问题分析

minicap:负责手机图片的图片显示,即能看到真机的屏幕信息和状态
minitouch:负责手机的位置点击、滑动等 UI 操作
这两个工具根据 google 发布的 Android 版本一一对应不同的工具文件。
当新的 Android 发布时,minicap 和 minitouch 的适配版本还未及时发布,这个时候就会影响用户的体验,新系统就无法正常提供使用。
minitouch 可通过 jar 包服务(基于 uiautomator)来替代,来实现 minitouch 提供的所有点击、触控功能;但 minicap 要用什么来替代呢?

四、解决方案

采取视频流的方式替代 minicap;minicap 以图片的方式传递图像信息,而视频流用的是视频流的方式。
注:stf 的作者也在尝试将 minicap 图片的方式转换为视频的方式去获取远端手机图像。

五、实现的效果


 实时操作:界面清晰流畅、无卡顿现象

六、优势

①、视频流的新应用场景
视频流的常见用法在视频聊天、直播等使用较多,在这种交互测试上使用较少。该方案打开了另一扇视频流的使用大门。

②、远程租用平台无需依赖和 Android 版本匹配的工具(需要发布者发布某 Android 版本才可用)

③、上线新机、升级新版本成本降低(无需进行 Android 版本的适配测试,多个版本用一个版本工具)

④、在 Google 发布基础上,定制化获取视频流 jar 工具。

⑤、minicap 使用的截图 API 是 android 私有 API,被封的风险高;视频流使用的是公开 API,风险低!

⑥、视频流是局部传递图像信息,只有当某块区域发生变化时才传递,网络传输数据量小。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
最佳回复

有没有什么办法可以收集到系统的声音?

看描述是拿到 framebuffer 做实时编码?这是肯定要占用不少系统负载啊,而且传输画面的延迟是多少呢?

共收到 34 条回复 时间 点赞

能否详细说下视频流技术是怎么实现的呢?是否有现有的工具?

用的安装 apk 录屏推流?还是和 minicap 一样,编译成 Android 可执行文件呀?能有点细节的东西就好了~

对 YueChen 回复

用的 scrcpy jar 包拿到手机的屏幕流信息

对 剪烛 回复

具体就是拿到手机的流信息,然后在 web 端处理流数据显示。用的是 scrcpy 开源 jar 包

对 xiaozhi_said 回复

我搜 scrcpy,搜到是 python 的爬虫,应该如何搜索?

360 麻烦你简单说下如何实现视频流的抓取啊

光发了一个实现了 xxx 的 changlog

对 群主是狗 回复


获取到数据后根据 h264 视频格式做下解析

对 群主是狗 回复

具体实现方案详细细节后面会发文章

目测下篇文章可以加精,⛽️加油

我试了下和系统自带的 screenrecord 对比,录制一个静止一分钟视频文件会大很多。
我想可能是动态码率的问题?所以是不是还需要一层服务去对 scrcpy 的视频流做处理,不然占用带宽太高也没法实用。。。

另外文中说的不需要适配?我看了下这里感觉也是用了私有 API 啊。。。https://github.com/Genymobile/scrcpy/blob/master/DEVELOP.md#hidden-methods

对 edsion 回复

可以修改 scrcpy 里面的部分,对图片做分辨率降低处理,用的是 MidiaCodec 实现的,不需要适配。(支持 Android5.0 以上)

看描述是拿到 framebuffer 做实时编码?这是肯定要占用不少系统负载啊,而且传输画面的延迟是多少呢?

对 浮云 回复

拿到 framebuffer 只做解码处理,此步骤是为了将数据转化为 web 端播放的数据格式,传输画面的效果和 minicap 差不多,延迟小于、等于 0.2 秒。而且从最终结果来看,视频流的方式比 minicap 在网络传输上字节更少。

用的是直播的思想。

对 sanbo 回复

是的

我看了下那个 scrcpy 只能支持 5.0 以上,你们是只针对 5.0 以上做了相应的修改吗?

对 群主是狗 回复

我们目前只针对 Android9 的使用视频流方式,Android9 以下的用的还是 minicap 的方式

有没有什么办法可以收集到系统的声音?

我们也实现了,不过 boradway 和 h264 好像针对 1080x1920 的视频解析好像有 bug。现在我们都统一用的 720x1280。

啥时候能发下具体实现方案详细细节?😔 😔

对 edsion 回复

主要是视频的屏幕尺寸参数,是可以减少的。

对 adfghzhang 回复

我们目前没有使用手机的原始屏幕尺寸,多交流。

对 zzZZZ 回复

scrcpy 有收集收集音频的方案。基于 android 的 aoa 协议

已经解决了,Android 和 iOS 的远控 demo 都测试 OK 了,多谢

对 adfghzhang 回复

iOS 上使用的什么呢?

29楼 已删除

大哥,如何拿到手机发过来的信息呀

我能够很好的,无延时的获取 h264 数据并展示到 web 上,但是我现在需要删除 stf 中 minicap 模块,请问有什么好的建议吗,谢谢

32楼 已删除
对 adfghzhang 回复

我现在也有遇到这个问题,请问大神你是怎么解决的?

你好,屏幕尺寸你们是怎么处理的呢?我这边发现除了 720X1080,其他的分辨率播放都有一些问题。

对 adfghzhang 回复

大佬 能否共享下 demo

仅楼主可见
对 xiaozhi_said 回复

大佬,pc 用 socket 怎么拿到视频流呀?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册。