v1.3.2-release 正式发布啦~
该版本上新了 Scrcpy 投屏,但是安卓投屏已经有 MiniCap 了。到底 Scrcpy 能带来怎样的体验呢?

以往 Sonic 使用的 Minicap 投屏

如果我们把 Minicap 画质压缩到 80,我们可以看到投屏效果清晰度还是算高的:

然后我们看一下带宽:

很明显,清晰度达到了我们的要求,但是带宽实在是太高了,这还是我稍微压缩过的,如果是一些分辨率稍大一点的手机,可能每帧达到 1M 左右,会造成 FPS 下降,而且局域网带宽严重负荷。

于是 Sonic 之前使用的是 Minicap 官方说的方式:

Usable to very smooth FPS depending on device. Older, weaker devices running an old version of Android can reach 10-20 FPS. Newer devices running recent versions of Android can usually reach 30-40 FPS fairly easily, but there are some exceptions. For maximum FPS we recommend running minicap at half the real vertical and horizontal resolution.

压缩投屏的分辨率来获得更高的 FPS,踩过不少坑之后,拿到的清晰度就是我们看到的

可以看到图片的文字都已经比较模糊,但是带宽确实降低了不少,FPS 也达到了顺畅的水准:

除此之外,我还做了丢帧,相同图片的直接不发送,其余的丢弃三分之一的帧,但是带宽还是比较高。
当然,Minicap 还有一个很致命的缺点,兼容性太差了,不仅小米、vivo、LGE 有兼容性问题,最新的华为 P50 都已经无法兼容了。

Scrcpy 的提升

Scrcpy 我们将 socket 桥接过来处理,直接发送 h264 裸流给前端渲染,清晰度是怎么样的呢?

可以看出来,投屏清晰度已经和 Minicap 最清晰的时候有得一拼了(理论上比 Minicap 要稍微清晰),那么他的带宽是多少呢?

对你没有看错,一帧基本不超 10KB!
那么 Scrcpy 带来的投屏体验自然是很不错的,那为什么 Sonic 不直接舍弃 Minicap 呢?
Scrcpy 也有一个缺点,就是会造成 CPU 功耗增加、设备发热会更严重一些,我认为这种风险应该让用户去权衡,于是将两种投屏方式都做进去,让用户可以切换着使用。

Scrcpy 提供不少好的思路,iOS 目前一直用 wda 的 mjpegserver,带宽消耗和 FPS 都没能达到满意的程度,接下来,需要对 iOS 的投屏也要做一番优化了!


↙↙↙阅读原文可查看相关链接,并与作者交流