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

opentest-oper@360.cn · December 13, 2018 · Last by Byb replied at March 27, 2020 · 5467 hits

一、真机租用

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可执行文件呀?能有点细节的东西就好了~

YueC 回复

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

剪烛 回复

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

xiaozhi_said 回复

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

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

光发了一个实现了xxx的changlog

watchdog 回复


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

watchdog 回复

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

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

我试了下和系统自带的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以上做了相应的修改吗?

watchdog 回复

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

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

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

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

edsion 回复

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

adfghzhang 回复

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

zzZZZ 回复

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

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

adfghzhang 回复

iOS 上使用的什么呢?

29Floor has been deleted

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

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

32Floor has been deleted
adfghzhang 回复

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

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

adfghzhang 回复

大佬 能否共享下demo

Byb · #36 · March 27, 2020
Author only
xiaozhi_said 回复

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

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up