barry-ran/QtScrcpy
GitHub: barry-ran/QtScrcpy
一款基于Qt的高性能跨平台Android投屏控制软件,支持自定义按键映射和多设备群控。
Stars: 28651 | Forks: 3463
# QtScrcpy



[中文用户?点我查看中文介绍](README_zh.md)
QtScrcpy 支持通过 USB 或网络显示和控制 Android 设备。它不需要 root 权限。
它支持三大平台:GNU/Linux、Windows 和 macOS。
它专注于:
- **轻量**(仅显示设备屏幕)
- **性能**(30~60 fps)
- **质量**(1920×1080 或更高)
- **低延迟**([35~70ms][lowlatency])
- **低启动时间**(显示第一帧仅需约 1 秒)
- **非侵入性**(设备上不会安装任何内容)



## 按键映射
你可以根据需要编写脚本,将键盘和鼠标操作映射到手机的触摸和点击事件。脚本编写规则在[这里](docs/KeyMapDes.md)。
默认提供了 TikTok 和一些游戏的脚本。启用后,你可以用键盘和鼠标玩游戏。PUBG Mobile 的默认按键映射如下:

添加自定义映射文件的说明。
- 编写自定义脚本并将其放入 `keymap` 目录
- 点击 `刷新脚本` 以显示它
- 选择你的脚本
- 连接手机,启动服务并点击 `应用`
- 按 `~` 键(按键映射脚本中的 SwitchKey)切换到自定义映射模式
- 再次按 `~` 键切换回正常模式
- (对于 PUBG Mobile 等游戏)如果你想用 STEER_WHEEL 键移动车辆,需要将移动模式设置为 `单摇杆模式`。
## 群控
你可以同时控制所有手机。

## 致谢
QtScrcpy 基于 [Genymobile](https://github.com/Genymobile) 的 [scrcpy](https://github.com/Genymobile/scrcpy) 项目。非常感谢!
QtScrcpy 与原始 scrcpy 的区别如下:
要点|scrcpy|QtScrcpy
--|:--:|:--:
ui|sdl|qt
视频编码|ffmpeg|ffmpeg
视频渲染|sdl|opengl
跨平台|自行实现|由 Qt 提供
语言|C|C++
风格|同步|异步
按键映射|无自定义按键映射|支持自定义按键映射
构建|meson+gradle|qmake 或 CMake
- 使用 Qt 定制 GUI 非常容易
- 基于 Qt 信号槽机制的异步编程提高了性能
- 易于学习
- 增加了对多点触控的支持
## 学习
如果你感兴趣并想了解其工作原理但不知道如何入手,可以选择购买我录制的视频课程。
它详细介绍了开发架构和整个软件的开发过程,并帮助你从零开始开发 QtScrcpy。
课程介绍:[https://blog.csdn.net/rankun1/article/details/87970523](https://blog.csdn.net/rankun1/article/details/87970523)
你可以加入 QtScrcpy Telegram 群组,与志同道合的朋友交流想法:
Telegram 群组:https://t.me/+EnQNmb47C_liYmRl
## 系统要求
Android API >= 21 (Android 5.0)。
确保你在设备上启用了 [ADB 调试][enable-adb]。
## 下载
### Windows
在 Windows 上,为简单起见,Releases 页面提供了包含所有依赖项(包括 ADB)的预构建压缩包:
- [`QtScrcpy`][github-download]
或者你可以[自己构建](#Build)
### Mac OS
在 Mac OS 上,为简单起见,Releases 页面提供了包含所有依赖项(包括 ADB)的预构建压缩包:
- [`QtScrcpy`][github-download]
或者你可以[自己构建](#Build)
### Linux
对于 Arch Linux 用户,可以使用 AUR 安装:`yay -Syu qtscrcpy`(可能不是最新版本;维护者:[yochananmarqos](https://aur.archlinux.org/account/yochananmarqos))
对于其他发行版的用户,可以使用 Releases 页面的预构建压缩包:
- [`QtScrcpy`][github-download]
或者你可以在 `dev` 分支的 [GitHub Actions](https://github.com/barry-ran/QtScrcpy/actions/workflows/ubuntu.yml) 中下载最新的构建产物。
或者你可以[自己构建](#Build)(不推荐,如果可以请从 Actions 获取)
## 运行
在电脑上连接 Android 设备,然后运行程序并点击 `USB 连接` 或 `WiFi 连接`
### 无线连接步骤(确保手机和 PC 在同一局域网内):
1. 在 Android 设备的开发者选项中启用 USB 调试
2. 通过 USB 将 Android 设备连接到电脑
3. 点击更新设备,你会看到设备编号已更新
4. 点击获取设备 IP
5. 点击启动 adbd
6. 点击无线连接
7. 再次点击更新设备,将发现另一个带有 IP 地址的设备。选择此设备。
8. 点击启动服务
注意:启动 adbd 后,无需保持 Android 设备通过 USB 连接。
## 界面按钮介绍:
- 启动配置:启动服务前的功能参数设置
你可以设置本地录制视频的比特率、分辨率、录制格式和视频保存路径。
- 后台录制:启动服务后不显示 Android 设备屏幕。在后台进行录制。
- 置顶:Android 设备的视频窗口将保持在最前
- 关闭屏幕:启动服务后自动关闭 Android 设备屏幕以节省电量
- 反向连接:服务启动模式。如果遇到连接失败并提示 `more than one device`,可以取消勾选此项
- 刷新设备:刷新当前连接的设备
- 启动服务:连接到 Android 设备
- 停止服务:断开与 Android 设备的连接
- 停止所有服务:断开所有已连接的 Android 设备
- 获取设备 IP:获取 Android 设备的 IP 地址并更新到“无线”区域,以便于设置无线连接。
- 启动 adbd:启动 Android 设备的 adbd 服务。在无线连接之前必须启动它。
- 无线连接:无线连接到 Android 设备
- 无线断开:断开无线连接的 Android 设备
- adb 命令:执行自定义 ADB 命令(目前不支持阻塞命令,如 shell)
## 主要功能
- 实时显示 Android 设备屏幕
- 实时鼠标和键盘控制 Android 设备
- 屏幕录制
- 截图为 png
- 无线连接
- 支持多设备连接
- 全屏显示
- 置顶显示
- 安装 apk:将 apk 拖放到视频窗口进行安装
- 传输文件:将文件拖放到视频窗口以将文件发送到 Android 设备
- 后台录制:仅录制,无显示界面
- 复制粘贴
可以在电脑和设备之间双向同步剪贴板:
- `Ctrl + c` 将设备剪贴板复制到电脑剪贴板;
- `Ctrl + Shift + v` 将电脑剪贴板复制到设备剪贴板;
- `Ctrl + v` 将电脑剪贴板作为文本事件序列粘贴(尚不支持非 ASCII 字符)。
- 群控
- 将设备扬声器声音同步到电脑(基于 [sndcpy](https://github.com/rom1v/sndcpy),仅限 Android 10+)
## 快捷键
| 操作 | 快捷键 (Windows) | 快捷键 (macOS)
| -------------------------------------- |:----------------------------- |:-----------------------------
| 切换全屏模式 | `Ctrl`+`f` | `Cmd`+`f`
| 调整窗口大小为 1:1 (像素完美) | `Ctrl`+`g` | `Cmd`+`g`
| 调整窗口大小以去除黑边 | `Ctrl`+`w` \| _双击¹_ | `Cmd`+`w` \| _双击¹_
| 点击 `HOME` | `Ctrl`+`h` \| _中键点击_ | `Ctrl`+`h` \| _中键点击_
| 点击 `BACK` | `Ctrl`+`b` \| _右键点击²_ | `Cmd`+`b` \| _右键点击²_
| 点击 `APP_SWITCH` | `Ctrl`+`s` | `Cmd`+`s`
| 点击 `MENU` | `Ctrl`+`m` | `Ctrl`+`m`
| 点击 `VOLUME_UP` | `Ctrl`+`↑` _(上)_ | `Cmd`+`↑` _(上)_
| 点击 `VOLUME_DOWN` | `Ctrl`+`↓` _(下)_ | `Cmd`+`↓` _(下)_
| 点击 `POWER` | `Ctrl`+`p` | `Cmd`+`p`
| 开启电源 | _右键点击²_ | _右键点击²_
| 关闭设备屏幕 (保持镜像)| `Ctrl`+`o` | `Cmd`+`o`
| 展开通知面板 | `Ctrl`+`n` | `Cmd`+`n`
| 收起通知面板 | `Ctrl`+`Shift`+`n` | `Cmd`+`Shift`+`n`
| 复制到剪贴板³ | `Ctrl`+`c` | `Cmd`+`c`
| 剪切到剪贴板³ | `Ctrl`+`x` | `Cmd`+`x`
| 同步剪贴板并粘贴³ | `Ctrl`+`v` | `Cmd`+`v`
| 注入电脑剪贴板文本 | `Ctrl`+`Shift`+`v` | `Cmd`+`Shift`+`v`
_¹双击黑边将其移除。_
_²右键点击在屏幕关闭时开启屏幕,否则按下 BACK。_
_³仅限 Android >= 7。_
## 待办事项
[TODO](docs/TODO.md)
## 常见问题
[FAQ](docs/FAQ.md)
## 开发
[DEVELOP](docs/DEVELOP.md)
欢迎大家维护这个项目并贡献代码,但请遵循以下要求:
1. 请向 dev 分支而不是 master 分支提交 PR
2. 在提交 PR 之前请 rebase 原始项目
3. 请遵循“少量多次”的原则提交 PR(建议一个更改对应一个 PR)
4. 请保持代码风格与现有风格一致。
## 为什么要开发 QtScrcpy?
根据重要性(从高到低)列出了以下几个原因。
1. 在学习 Qt 的过程中,我需要一个真正的项目来尝试。
2. 我有一些音视频背景技能,并且对它们感兴趣。
3. 我有一些 Android 开发技能。但我已经很久没用了。我想巩固一下。
4. 我发现了 scrcpy 并决定用新技术栈(C++ + Qt + Opengl + FFmpeg)重新制作它。
## 构建
所有依赖项都已提供,编译很容易。
### QtScrcpy
#### 非 Arch Linux 用户
1. 在目标平台上使用官方 Qt 安装程序或第三方工具(如 [aqt](
#### 组织
用你的组织支持这个项目。你的 logo 将显示在这里并链接到你的网站。[[资助](https://opencollective.com/QtScrcpy/contribute)]
标签:Android投屏, FPS游戏映射, Linux软件, macOS软件, MDM, Qt开发, Scrcpy客户端, TikTok脚本, USB调试, Windows软件, 低延迟, 多设备控制, 实时显示, 录屏, 手机控制, 无线投屏, 桌面控制软件, 游戏辅助, 移动设备管理, 群控系统, 计算机控制, 输入模拟, 键鼠映射