三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

安卓投屏不装App还能群控几十台手机?QtScrcpy 免费开源完整指南

安卓投屏不装App还能群控几十台手机?QtScrcpy 免费开源完整指南

安卓投屏不装App还能群控几十台手机?QtScrcpy 免费开源完整指南

【免费下载链接】QtScrcpyAndroid real-time display control software项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy

提到"手机投屏到电脑",很多人第一反应是下载某款商业投屏软件,装App、连WiFi、看广告,折腾一圈下来画面还是糊的、延迟还是高的。而 QtScrcpy 这款免费开源的安卓投屏控制工具给出的答案完全不同:手机端零安装、不需要root,USB或WiFi连上后大约1秒出画面,延迟稳定在35~70ms,从单机投屏到几十台设备批量群控,一套软件全部覆盖。这篇文章不按说明书念参数,而是带你从"为什么它能做到"一路走到"我自己也能用出花",最后还给开发者留了一条快速上手的路径。

一、同样是"投屏",为什么多数方案都卡在同一道坎上

先别急着安装,先看清市面上三种主流方案各自的软肋,你才知道 QtScrcpy 的价值落在哪里。

方案类型手机端要求延迟表现免费程度典型软肋
商业投屏App安装App、注册登录150ms起,受云端转发影响基本收费或限功能画质被压缩、隐私存疑、广告多
截图轮询方案常驻App数百毫秒多数收费只是"会动的截图",无法流畅操作
ADB调试投屏(scrcpy系)无需安装35~70ms开源免费界面简陋、学习成本高

QtScrcpy 属于第三类,但它把第三类的短板补上了。它基于 Genymobile 的 scrcpy 项目重构,把原本用 C 语言 + SDL 搭建的骨架,换成 C++ + Qt + OpenGL + FFmpeg 的技术栈,于是同时拿到了三样东西:

  • 速度:30~60fps,支持 1920×1080 以上分辨率,首帧约1秒出现;
  • 门槛:手机端不用装任何应用,也不需要root,Android 5.0(API 21)以上即可;
  • 桌面体验:Windows、macOS、Linux 三平台原生界面,而不是黑乎乎的SDL窗口。

划重点:别的方案要手机"配合你",QtScrcpy 是手机"不设防"地被读取画面——这就是"非侵入性"四个字的实际含义。

二、不玄乎的原理:一台手机是怎么被搬进电脑屏幕的

它的工作方式可以拆成一条流水线,四个环节各司其职:

  1. 手机端:一个轻量 Java 程序(scrcpy-server)临时运行,通过 MediaCodec 硬件编码器把屏幕实时压成 H.264 视频流;
  2. 通道:视频流经 ADB 的 forward 隧道(有线)或 TCP 端口(无线)传到电脑,ADB 同时承担反向注入触摸、按键事件的任务;
  3. 电脑端解码:FFmpeg 负责把 H.264 流解码成视频帧;
  4. 电脑端渲染:OpenGL 把视频帧画到 Qt 窗口上,Qt 的信号槽机制让"解码、渲染、事件处理"异步并行,互不阻塞。

延迟低,靠的不是什么玄学优化,而是三条硬规则:视频帧解码后立即上屏、不积压缓冲;编码交给手机硬件的MediaCodec而不是CPU软编;解码、渲染、事件处理分线程跑,谁也不等谁。

它和原版 scrcpy 的差异,用一张表就能看清:

关键点scrcpyQtScrcpy
界面SDLQt
视频渲染SDLOpenGL
语言CC++
编程风格同步异步(信号槽)
自定义按键映射不支持支持
多点触控基础增强

这套重构带来的直接收益,是"界面可定制、性能不吃亏、新手能看懂"。如果你日后想基于它做二次开发,C++ + Qt 的生态也比 SDL 友好得多。

三、20分钟上手:三种方式看到手机屏幕

第一步:准备好手机和电脑

手机要求很低:Android 5.0 及以上,并且在"开发者选项"里打开USB调试(连续点击"版本号"7次即可解锁开发者选项)。Windows 用户建议直接下载官方预编译包(已内置ADB),Linux 用户除了预编译包,Arch 系还能用yay -Syu qtscrcpy一键装。

路径一:USB直连,最稳的方式

  1. 用数据线连接手机和电脑;
  2. 打开 QtScrcpy,点"刷新设备",列表里出现设备序列号;
  3. 点"启动服务",手机屏幕就出现在电脑窗口里了。

从点击到看到画面,通常就是1秒出头。电脑端界面长这样:

路径二:WiFi无线连接,摆脱线缆

无线模式的前提是手机和电脑在同一局域网,且首次必须先用USB配对一次:

  1. USB连接手机,点"获取设备IP";
  2. 点"启动adbd",开启手机的无线调试服务;
  3. 点"无线连接",稍等片刻后"刷新设备",列表中会出现带IP地址的新设备;
  4. 选中这个设备,点"启动服务";
  5. 成功后即可拔掉USB线。

之后每次想连,只要手机重启过才需要重复上述步骤;同一次开机状态内直接无线连接即可。

路径三:三平台通吃

同一个操作逻辑在 Linux 上完全一致,界面组件也保持统一:

如果设备没被识别,先在终端里按这个顺序排查:

adb devices # 设备是否出现在列表 adb kill-server # 重启ADB服务 adb start-server # 再启动一次 adb devices # 重新确认

手机端弹出的"允许USB调试"授权框要点允许,Windows下偶尔还需安装对应的USB驱动。大多数"连不上"的问题,到这一步就解决了。

四、从"看"到"用":拖拽、快捷键与录屏的隐藏生产力

投屏只是入场券,QtScrcpy 真正提升效率的是"控制和传输"这一层。

第一招:拖拽即安装、拖拽即传文件。把 APK 文件直接拖进投屏窗口,自动完成安装;把任意文件拖进去,自动发送到手机的下载目录。批量测试App时,这一下能省掉大量重复的adb install

第二招:剪贴板双向同步。手机上复制,电脑直接粘贴;反过来也一样。日常在电脑上查资料、填手机上的表单,不用再"复制-切换-粘贴"来回倒。需要说明的是,纯文本跨端同步最顺畅,复杂内容建议先存成文本再走剪贴板。

第三招:快捷键体系。记住下面这几个高频的,其余按需查阅:

操作WindowsmacOS
切换全屏Ctrl+fCmd+f
窗口缩放为1:1Ctrl+gCmd+g
返回键Ctrl+b / 右键Cmd+b / 右键
HOME键Ctrl+h / 中键Ctrl+h / 中键
关闭手机屏幕(保持投屏)Ctrl+oCmd+o
复制到电脑剪贴板Ctrl+cCmd+c
把电脑剪贴板注入手机Ctrl+Shift+vCmd+Shift+v

(右键单击:屏幕熄着是点亮,亮着是返回,很顺手。)

第四招:录制与截图。"启动配置"面板里可以预先设置录制参数,然后开始服务时勾选"后台录制"——手机画面不在电脑上显示,直接安静地录进文件,适合长时间录屏又不占桌面空间的场景。

录制参数可选范围建议
比特率可调(如2Mbps)1080p日常录制 4~8Mbps
分辨率可调平衡画质与流畅度
封装格式mp4等兼容性首选mp4
保存路径自定义提前建好文件夹
后台录制开/关只录画面不显示窗口

截屏更简单,快捷键 Ctrl+s 保存当前帧为 PNG。手机上还支持同步播放音频(基于sndcpy方案,Android 10+),需要用到项目QtScrcpy/sndcpy目录里的 sndcpy.apk。

五、批量管理:一次操作同步控制全部手机

如果你只连一台手机,QtScrcpy 是"投屏工具";当你连上第二台、第三台时,它就变成了"群控台"。点击群组控制模式后,所有设备进入统一管理界面:

群控的核心体验是"一个动作,全体响应":

  • 批量启动/停止:不用一台一台点"启动服务",一键全体连接或断开;
  • 批量指令:通过 adb 命令面板对全部设备下发同一命令;
  • 统一状态:每台设备的连接状态、画面流畅度一眼扫完。

手游工作室批量养号、应用商店做多机型兼容性测试、培训时给学员统一演示——这些"几十台手机同时在线"的场景,正是它存在的理由。单机使用时它轻量安静,多机时又切换成调度中心,两种形态互不干扰。

六、把手机游戏当端游玩:键鼠映射的正确姿势

这是 QtScrcpy 区别于多数同类工具的独门功能:把键盘按键、鼠标移动翻译成手机的触摸事件。项目keymap目录里已经带了几个可直接用的映射脚本——gameforpeace.json(和平精英)、identityv.json(第五人格)、tiktok.json(抖音)、FRAG.json

以和平精英为例,启用映射后,游戏画面里会出现蓝色半透明的按键标识:

启用一套映射只需五步:

  1. 把映射JSON文件放进keymap目录;
  2. 在工具面板点"刷新脚本",让它被识别;
  3. 选中脚本,连接手机并"启动服务";
  4. 点"应用脚本";
  5. ~键(脚本里定义的 switchKey)切换到自定义映射模式,再按一次切回普通模式。

想自己写映射也不难,格式是带注释的JSON。比如"按空格键,在屏幕(0.5, 0.5)处触发一次点击,然后0.5秒后在(0.8, 0.8)处再点一次":

{ "switchKey": "Key_QuoteLeft", "keyMapNodes": [ { "comment": "一键多点", "type": "KMT_CLICK_MULTI", "key": "Key_Space", "clickNodes": [ { "delay": 0, "pos": { "x": 0.5, "y": 0.5 } }, { "delay": 500, "pos": { "x": 0.8, "y": 0.8 } } ] } ] }

坐标全部用 0~1 的相对值表示,意味着同一份脚本在1080p和1440p屏幕上表现一致;映射类型还支持 KMT_DRAG(拖拽)、KMT_STEER_WHEEL(FPS游戏的方向盘移动)和 mouseMoveMap(鼠标移动模拟视角)。完整的编写规则在项目docs/KeyMapDes_zh.md里,配一张按键坐标调试图,十分钟就能上手。

七、开发者上手:读懂这个开源项目骨架的30分钟路线

如果你是开发者,想读源码或改代码,先看这张地图能省下大量摸索时间:

QtScrcpy/ ├── QtScrcpy/QtScrcpyCore/ # 核心逻辑:视频解码、设备通信、服务器管理 ├── QtScrcpy/ui/ # 主界面、视频窗口、工具面板(Qt Designer文件也在) ├── QtScrcpy/audio/ # 音频输出(sndcpy通道) ├── QtScrcpy/render/ # OpenGL / Metal 视频渲染实现 ├── QtScrcpy/util/ # 跨平台工具:配置、路径、鼠标事件 ├── keymap/ # 按键映射JSON脚本 └── ci/ # 三平台的构建/打包脚本

本地编译的要求不高:Qt 5.12及以上(Windows用MSVC 2019)、CMake,然后克隆仓库(记得带子模块,服务器端二进制依赖它):

git clone --recurse-submodules https://gitcode.com/GitHub_Trending/qt/QtScrcpy cd QtScrcpy

Linux 上一条命令就能出Release包:

./ci/linux/build_for_linux.sh "Release"

产物默认在output/x64/Release。想深挖视频管线,看QtScrcpyCore里服务启动与帧接收的部分;想改交互,直接打开ui/*.ui拖控件——这正是它比原版scrcpy更容易定制的关键。项目还提供了完整的构建配置(CMakeLists.txt)和三平台CI脚本(ci/下 win/mac/linux 各一套),照着脚本抄作业即可在自己的环境复现打包流程。

八、下一步:按图索骥的行动清单

与其停在"收藏了等于会了",不如照着下面四步走一遍,基本就能覆盖日常90%的需求:

  1. 今天:连一台手机,USB方式完成首次投屏,试一次录屏和截图;
  2. 本周:按无线连接五步走一遍,把线缆戒掉;把常用快捷键抄到便签上;
  3. 本月:若是游戏玩家,加载keymap里的现成映射打一局;若是测试/运维,把群控模式用起来,体验一次批量操作;
  4. 进阶:在docs/下翻阅 FAQ、KeyMapDes 和 DEVELOP 文档,挑一个感兴趣的方向改一版自己的QtScrcpy。

至于它未来的方向,从作者对 QuickMirror(极限投屏)等衍生作品的布局能看出,这类工具的演进大概率会沿着"更低延迟、更高分辨率、更强批量管理"推进——而 QtScrcpy 作为开源版的最短路径,恰恰是普通用户和开发者共同的起跑线。免费的、跨平台的、不装App不root的安卓投屏控制,这个组合本身就是它最大的竞争力。

【免费下载链接】QtScrcpyAndroid real-time display control software项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

← 返回列表