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 做实时编码?这是肯定要占用不少系统负载啊,而且传输画面的延迟是多少呢?
能否详细说下视频流技术是怎么实现的呢?是否有现有的工具?
用的安装 apk 录屏推流?还是和 minicap 一样,编译成 Android 可执行文件呀?能有点细节的东西就好了~
360 麻烦你简单说下如何实现视频流的抓取啊
光发了一个实现了 xxx 的 changlog
目测下篇文章可以加精,⛽️加油
我试了下和系统自带的 screenrecord 对比,录制一个静止一分钟视频文件会大很多。
我想可能是动态码率的问题?所以是不是还需要一层服务去对 scrcpy 的视频流做处理,不然占用带宽太高也没法实用。。。
另外文中说的不需要适配?我看了下这里感觉也是用了私有 API 啊。。。https://github.com/Genymobile/scrcpy/blob/master/DEVELOP.md#hidden-methods
可以修改 scrcpy 里面的部分,对图片做分辨率降低处理,用的是 MidiaCodec 实现的,不需要适配。(支持 Android5.0 以上)
看描述是拿到 framebuffer 做实时编码?这是肯定要占用不少系统负载啊,而且传输画面的延迟是多少呢?
拿到 framebuffer 只做解码处理,此步骤是为了将数据转化为 web 端播放的数据格式,传输画面的效果和 minicap 差不多,延迟小于、等于 0.2 秒。而且从最终结果来看,视频流的方式比 minicap 在网络传输上字节更少。
用的是直播的思想。
我看了下那个 scrcpy 只能支持 5.0 以上,你们是只针对 5.0 以上做了相应的修改吗?
我们目前只针对 Android9 的使用视频流方式,Android9 以下的用的还是 minicap 的方式
有没有什么办法可以收集到系统的声音?
我们也实现了,不过 boradway 和 h264 好像针对 1080x1920 的视频解析好像有 bug。现在我们都统一用的 720x1280。
我能够很好的,无延时的获取 h264 数据并展示到 web 上,但是我现在需要删除 stf 中 minicap 模块,请问有什么好的建议吗,谢谢
你好,屏幕尺寸你们是怎么处理的呢?我这边发现除了 720X1080,其他的分辨率播放都有一些问题。