简单分享一个 scrcpy 的 web 端,是目前个人体验最好的远程控制方案。配合回家代理或内网穿透,基本可以实现市面上类似云手机的效果,而且不需要安装额外客户端,也不挑平台,有浏览器就行。
名称: ws scrcpy
项目地址: GitHub - NetrisTV/ws-scrcpy: Web client prototype for scrcpy.
首先复读一下官方的需求说明:
浏览器需要支持:
- WebSockets
- Media Source Extensions and h264 decoding;
- WebWorkers
- WebAssembly
注1:现代主流浏览器基本都没问题,如果出现问题可以检查一下是否是插件或者设置禁用了相关技术。比如我遇到过因为使用 arkenfox.js 默认设置把 WebAssembly 禁用了。
服务端:
- Node.js v10+
- node-gyp
- adb
注2:编译时的内存需求应该比较大,比如我在树莓派3B+(armbian)上因为 hit heap size 编译失败。不过可以在其他机器上编译拷贝dist目录,所以我在4B上编译再拷贝dist到3B+直接运行。当然,运行需要安装 Nodejs 项目依赖。
注3: 不要使用 Nodejs v17+,有库不兼容
安卓设备端:
- Android 5.0+ (API 21+)
- Enabled adb debugging
- On some devices, you also need to enable an additional option to control it using keyboard and mouse.
注4: 没什么说的,wireless debug 也可以,反正是通过 adb 连接设备。第三点键鼠控制的问题我没遇到过。
项目编译
Nodejs 项目标准步骤:克隆项目 → npm install → npm run dist
如果编译失败上面可以看看上面我提到的备注事项
运行项目
cd dist && node index.js
我使用了 PM2 来启动后台:
pm2 start ~/codes/ws-scrcpy/dist --name ws-scrcpy
使用举例
- 连接设备
adb connect mipad.lan:5555
adb connect pixel.lan:5555
- 访问网页
http://<ws-scrcpy-server>:8000
, 就能看到简陋但一目了然的界面
Broadway.js / H264 Converter / Tiny H264:三种播放器库,具体技术适用说明参考项目 README,这里不复读了,找个能用不卡的。
Config stream: 可以调整三种播放器的默认设置,比如 FPS, bitrate, 高宽等等,推荐打开 Fit to screen
进入远程控制效果如下,依然是一目了然的界面。右上角三个点可以展开设置菜单,可以复制剪贴板、stream设置、断开连接等。
熄屏控制
ws-scrcpy 项目本身并不支持息屏控制,这里曲线救国一下,需要息屏时在服务端运行类似以下命令,目的是额外开一个息屏连接并输出到任意一个不存在的设备:
scrcpy -Sw -b10K -m400 –max-fps 1 –v4l2-sink=/dev/video11 -N –tcpip=mipad.lan
具体参数解释请参考 scrcpy README。
但注意,这个连接并不会屏蔽休眠和电源键。如果因为按下电源或者静置触发锁屏,需要断开再重新运行以上命令。我的选择是直接在安卓上禁止自动锁屏。
如1L所说,控制界面设置选单中的 SET SCREEN POWER MODE 即为熄屏开关:
- 未勾选状态 OFF:点击按钮关闭设备屏幕显示
- 勾选状态 ON:点击按钮打开设备屏幕显示
而且息屏后即使你断开连接,只要设备未自动熄屏,下次连接时依然保持熄屏状态而不会打开屏幕显示。
iOS 控制
另外值得一提,项目支持 iOS 设备控制,但需要自定义 build。我没有折腾,感兴趣的朋友可以自行研究。
iOS
Experimental Feature: is not built by default (see custom build)