STF ca..原来 stf 还可以这么玩...

xc · 2019年09月24日 · 最后由 emilybobwang 回复于 2022年03月21日 · 5282 次阅读
本帖已被设为精华帖!

上班摸鱼逛论坛时, 无意中看到一个叫刚上线不久的, 叫岩鼠的云测平台的内侧宣传, 上去注册了个新号后, 居然送了 120 分钟免费云真机使用时间, 真厚道, 作为一个混迹于各个平台的资深云真机用户, 并且自己也在负责公司内部同类型的的云测平台, 自身对 stf 也比较熟悉, 于是很好奇地去深入挖掘了一些里面的技术细节, 发现该平台十分牛逼.

第一感觉

第一眼看下去, 非常清爽, 使用起来非常流畅, 进入真机几乎是秒开, 操作响应也非常及时, 而且右边的菜单区域还有不少他们扩展的功能, 他们家的 iPhone 使用起来还比较流畅, 总体使用起来, 感觉非常棒.


从技术的角度看看, 首先可以看出他们应该是基于 openstf 的

从消息的命名和前端的几个 websocket 连接, 看起来也是基于 openstf 去做的, 但可以看出他们在 openstf 的基础上做了很多扩展和优化.
例如这个 stf 后端与前端通信的主要的 websocket: 
 wss://yanshu.effirst.com/socket.io/?EIO=3&transport=websocket
里面有十分多他们自己扩展的信息, 例如 webdebug.enable  logcat.irmaStartSer 等.. 似乎都是对应云真机里面他们扩展的 web 调试 和 日志的功能的.




而且 touch 的消息也是与 openstf 一模一样, 可以断定, 他们也是基于 openstf 或者使用了 openstf 里面的 minitouch.


另一个传输手机屏幕的 websocket, 更惊喜了..

他们的屏幕数据传输量非常小...

对比我们自己的, 简直是差距太大了啊...

从 devtools 下面的 16 进制数据可以看出, 数据中都是 0 0 0 1 开头, 应该是使用了 H264 或者 H265, 对比我们公司内部云测平台使用 openstf 的原生的方案, 数据量实在相差很大.

当前我们内部的云测平台, 手机屏幕的传输, 现在遇到的瓶颈主要有 2 个, 帧率和带宽. 我司的渣渣 WIFI, 绝大部分情况下最大的下载速度, 也就只有 2.5MB/s 左右, 即使我们调低了 minicap 输出的图片质量, 在我们可以接受的画质下, 最终输出的图片质量一张也 50KB 左右, 如果到达 30 帧时, 就已经吃掉了我们的电脑一大半的带宽了, 再连个 adb 调试, 也比较吃力, 另外我们有一些国产机型, minicap 的帧率最高只有不到 16 帧, 日常用起来体验还是能感觉到卡.

看到岩鼠的方案, 应该是和https://github.com/Genymobile/scrcpy的方案一样, 直接通过反射调用安卓的 SurfaceControl 私有 API, 把屏幕传给 MediaCodec, 由系统去做录屏, 最终编码成 H264, 通过 websocket 发送给前端的 video 做展示. 使用这样的方式, 在画面快速变化时, 基本都可以达到 60 帧, 并且流量能通过编码器的码率控制, 由于视频的压缩方式优势, 视频流能极大的减少了带宽, 并且提供高达 60 帧, 也不用考虑带宽过大的问题. 这块对于我们优化 minicap 的方案, 提供了一个新的思路.

我也要把这个方案搬到我司的内部云测平台上~~~

非常方便的 Web 调试

另外很吸引的我功能就是调试的 tab 里面的内容, 细玩了一下, 居然能直接在在右边区域, 调试手机里面的网页... 这波操作非常 6, 对于前端开发者来说, 非常方便.



更神奇的是, 居然 iOS 也能直接在网页通过 devtools 调试...而且体验还不差, safari 该有的功能他也有.
平时我们调试 iOS 的网页, 都需要把手机插到自己 mac, 使用 mac 的 safari 才能调. 至于他怎么做, 我不熟悉 iOS, 还真不知道了...








这个 web 调试功能, 我绝对服气, 市面上还没看到有竞品可以做到. 

先说这么多了, 下次再深挖一些岩鼠里面的一些更深入的技术细节, 我也要去规划一下我司内部的云测平台的优化计划.

共收到 21 条回复 时间 点赞

你的图都挂了

xc #2 · 2019年09月24日 Author
Jerry li 回复

恢复了, 刷新看看~~

iOS 有个工具叫 ios_webkit_debug_proxy,可以转发 webkit 的 inspector 的 websocket,然后用 chrome 浏览器 devtools 连接调试。
Android 可以用 adb forward 转发 webkit 的 inspector 的 websocket,然后用 chrome 浏览器 devtools 连接调试。
不知道岩鼠是不是这个思路。

xc #4 · 2019年09月24日 Author
甬力君 回复

但 ios_webkit_debug_proxy 支持得并不完美...元素高亮这些都不行.

楼主玩的也不差,通过蛛丝马迹推测商业平台的技术方案

这平台我看着怎么这么眼熟,果然是 UC 的

你试试,我记得这平台连语音同传都做了

xc #8 · 2019年09月24日 Author
codeskyblue 回复

听他们的分享, 他们的内部版是有语音同传..

恒温 将本帖设为了精华贴 09月26日 23:27

期待音频的技术开放

666 呀,要不要 MTSC 分享一拨!

我也一直在关注 scrcpy

想它看齐!

图像以视频传输的方式走在前面了。 使用的应该是 scrcpy 方案

我最早知道 360 开测就是 scrcpy 的,但清晰度可怜

xc #15 · 2019年09月27日 Author
cmlanche 回复

scrcpy 使用 SDL 播放, 比在 web 播放简单多了

楼主内部用的 STF 也是 wifi 连接吗 还是直接多台手机连单个电脑呀

赞一个!思路学习了

simple [精彩盘点] TesterHome 社区 2019 年 度精华帖 中提及了此贴 12月24日 22:45

webview 调试那个我实现了 其实很简单 翻一下 devtools 文档,轻松实现

Eason 回复

大佬能看看代码怎么实现的吗

huaxiaotian 回复

最近在准备开源我的测试平台,到时候你可以在代码里面看到,我到时候提及此贴,到时候请多多关注啦。目前进度大概还要一个月左右吧

大神,代码可以学习下不

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