C++版Android实时投屏软件系统源码,安卓手机投屏软件源码,无需root权限

news2024/11/21 0:29:22

QtScrcpy

QtScrcpy 可以通过 USB / 网络连接Android设备,并进行显示和控制。无需root权限。

同时支持 GNU/Linux ,Windows 和 MacOS 三大主流桌面平台。
完整代码下载地址:C++版Android实时投屏软件系统源码
它专注于:

  • 精致 (仅显示设备屏幕)
  • 性能 (30~60fps)
  • 质量 (1920×1080以上)
  • 低延迟 (35~70ms)
  • 快速启动 (1s 内就可以看到第一帧图像)
  • 非侵入性 (不在设备上安装任何软件)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

自定义按键映射

可以根据需要,自己编写脚本将键盘按键映射为手机的触摸点击,编写规则在这里。

默认自带了针对和平精英手游和抖音进行键鼠映射的映射脚本,开启平精英手游后可以用键鼠像玩端游一样玩和平精英手游,开启抖音映射以后可以使用上下左右方向键模拟上下左右滑动,你也可以按照编写规则编写其他游戏的映射文件,默认按键映射如下:

在这里插入图片描述

这里有玩和平精英的视频演示

自定义按键映射操作方法如下:

  • 编写自定义脚本放入 keymap 目录
  • 点击刷新脚本,确保脚本可以被检测到
  • 选择需要的脚本
  • 连接手机并启动服务之后,点击应用脚本
  • ~(即脚本中定义的 SwitchKey)键切换为自定义映射模式即可启用
  • 再次按~键切换为正常控制模式
  • (对于和平精英等游戏)若想使用方向盘控制载具,记得在载具设置中设置为单摇杆模式

群控

你可以同时控制所有的手机

在这里插入图片描述

感谢

基于Genymobile的scrcpy项目进行复刻,重构,非常感谢。

比较

QtScrcpy 和 Scrcpy 区别如下:

关键点scrcpyQtScrcpy
界面sdlqt
视频解码ffmpegffmpeg
视频渲染sdlopengl
跨平台基础设施自己封装Qt
编程语言CC++
编程方式同步异步
按键映射不支持自定义支持自定义按键映射
编译方式Meson+GradleCMake
  • 使用Qt可以非常容易的定制自己的界面
  • 基于Qt的信号槽机制的异步编程提高性能
  • 方便新手学习
  • 增加多点触控支持

要求

Android 部分至少需要 API 21(Android 5.0)。

您要确保在 Android 设备上启用adb调试。

运行

在你的电脑上接入Android设备,然后运行程序,点击 一键USB连接 或者 一键WIFI连接

无线连接步骤

  1. 将手机和电脑连接到同一局域网
  2. 安卓手机端在开发者选项中打开 USB 调试
  3. 通过 USB 连接安卓手机到电脑
  4. 点击刷新设备,会看到有设备号更新出来
  5. 点击获取设备 IP
  6. 点击启动 adbd
  7. 无线连接
  8. 再次点击刷新设备,发现多出了一个 IP 地址开头的设备,选择这个设备
  9. 启动服务

备注:启动 adbd 以后无需继续连接 USB 线,以后连接断开都不再需要,除非 adbd 停止运行

界面解释

  • 启动配置:启动服务前的功能参数设置

    分别可以设置本地录制视频的比特率、分辨率、录制格式、录像保存路径等。

    • 仅后台录制:启动服务不显示界面,只录制 Android 设备屏幕
    • 窗口置顶:Android 设备显示窗口置顶
    • 自动息屏:启动服务以后,自动关闭 Android 设备屏幕以节省电量
    • 使用 Reverse:服务启动模式,出现服务启动失败报错 “more than one device” 可以去掉这个勾选尝试连接
  • 刷新设备列表:刷新当前连接的设备

  • 启动服务:连接到 Android 设备

  • 停止服务:断开与 Android 设备的连接

  • 停止所有服务:断开所有已连接的 Android 设备

  • 获取设备ip:获取到 Android 设备的 IP 地址,更新到无线区域中,方便进行无线连接

  • 启动adbd:启动 Android 设备的 adbd 服务,无线连接之前,必须要启动

  • 无线连接:使用无线方式连接 Android 设备

  • 无线断开:断开无线方式连接的 Android 设备

  • 命令行:执行自定义 adb 命令(目前不支持阻塞命令,例如shell)

功能

  • 实时显示 Android 设备屏幕
  • 实时键鼠控制Android设备
  • 屏幕录制
  • 截图
  • 无线连接
  • 多设备连接与群控
  • 全屏显示
  • 窗口置顶
  • 安装 apk:拖拽apk到显示窗口即可安装
  • 传输文件:拖拽文件到显示窗口即可发送文件到 Android 设备
  • 后台录制:只录制屏幕,不显示界面
  • 剪贴板同步:
    在计算机和设备之间同步剪贴板:
    • Ctrl + c将设备剪贴板复制到计算机剪贴板;
    • Ctrl + Shift + v将计算机剪贴板复制到设备剪贴板;
    • Ctrl + v 将计算机剪贴板作为一系列文本事件发送到设备(不支持非ASCII字符)
  • 同步设备扬声器声音到电脑(基于sndcpy,仅支持安卓10级以上,目前不推荐使用,可使用蓝牙连接替代)

快捷键

功能快捷键(Windows)快捷键 (macOS)
切换全屏Ctrl+fCmd+f
调整窗口大小为 1:1Ctrl+gCmd+g
调整窗口大小去除黑边Ctrl+w | 左键双击Cmd+w | 左键双击
点击 主页Ctrl+h | 点击鼠标中键Ctrl+h | 点击鼠标中键
点击 BACKCtrl+b | 右键双击Cmd+b | 右键双击
点击 APP_SWITCHCtrl+sCmd+s
点击 MENUCtrl+mCtrl+m
点击 VOLUME_UPCtrl+ (上)Cmd+ (上)
点击 VOLUME_DOWNCtrl+ (下)Cmd+ (下)
点击 POWERCtrl+pCmd+p
打开电源右键双击右键双击
关闭屏幕 (保持投屏)Ctrl+oCmd+o
打开下拉菜单Ctrl+nCmd+n
关闭下拉菜单Ctrl+Shift+nCmd+Shift+n
复制到剪切板Ctrl+cCmd+c
剪切到剪切板Ctrl+xCmd+x
同步剪切板并粘贴Ctrl+vCmd+v
注入电脑剪切板文本Ctrl+Shift+vCmd+Shift+v

鼠标左键双击黑色区域可以去除黑色区域

如果电源关闭,鼠标右键双击打开电源;如果电源开启,鼠标右键双击相当于返回

为什么开发 QtScrcpy?

综合起来有以下几个原因,比重从大到小排列:

  1. 学习Qt的过程中需要一个项目实战一下
  2. 本身具有音视频相关技能,对音视频很感兴趣
  3. 本身具有 Android 开发技能,好久没用有点生疏,需要巩固一下
  4. 发现了 Scrcpy,决定用新的技术栈(C++ + Qt + Opengl + FFmpeg)进行复刻

编译

尽量提供了所有依赖资源,方便傻瓜式编译。

QtScrcpy

非 Arch Linux

  1. 使用官方 Qt Installer 或非官方工具(如 aqt)在目标平台上搭建Qt开发环境。
    需要 5.12 以上版本 Qt(在 Windows 上使用 MSVC 2019)
  2. 克隆该项目:git clone --recurse-submodules git@github.com:barry-ran/QtScrcpy.git
  3. Windows 使用 QtCreator 打开项目下 CMakeLists.txt 并编译 Release
  4. Linux 用终端执行 ./ci/linux/build_for_linux.sh "Release"
    注:编译结果位于 output/x64/Release

Arch Linux

  1. 安装以下包:qt5-base qt5-multimedia qt5-x11extras(推荐安装 qtcreator
  2. 克隆该项目:git clone --recurse-submodules git@github.com:barry-ran/QtScrcpy.git
  3. 用终端执行 ./ci/linux/build_for_linux.sh "Release"
    注:编译结果位于 output/x64/Release

Scrcpy-Server

  1. 目标平台上搭建 Android 开发环境
  2. 使用 Android Studio 打开项目根目录中的 server
  3. 第一次打开时,如果你没有对应版本的 Gradle,Studio 会提示找不到 Gradle,是否升级 Gradle 并创建,选择取消,取消后会提示选择 Gradle 的位置,同样取消即可。Studio 会随后自动下载。
  4. 按需编辑代码
  5. 编译出 apk 以后改名为 scrcpy-server 并替换 third_party/scrcpy-server 即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/162808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sentence-transformers(SBert)中文文本相似度预测(附代码)

前言 训练文本相似度数据集并进行评估:sentence-transformers(SBert)预训练模型:chinese-roberta-wwm-ext数据集:蚂蚁金融文本相似度数据集前端:Vue2elementuiaxios后端:flask 训练模型 创建网络:使用Sb…

c语言公司考勤系统

1.要求 考勤系统是公司人事管理重要环节,用于记录员工迟到、早退、缺席、请假等出勤情况,并能提供数据统计功能。系统需求如下: 认证用户,如密码方式; 设置上下班时间,并能判断是否迟到、早退; 记录出勤状况,能记录每日…

基础IO(2)--文件描述符以及输入输出重定向

文件描述符fd 文件操作的本质是进程和被打开文件的关系。 进程可以打开多个文件&#xff0c;这些被打开的文件由OS管理&#xff0c;所以操作系统必定要为文件创建对应的内核数据结构标识文件–struct file{}【与C语言的FILE无关】 通过如下程序 #include <stdio.h> #…

uni-app在真机调试下兼容ethers的方法

目录 一、安装ethers 二、renderjs 三、注意事项 uni-app开发跨平台应用程序&#xff0c;项目搭建主要前端框是Uni-app Vue3 TS Vite&#xff0c;项目搭建参考文章Uni-app Vue3 TS Vite 创建项目 Hbuilderx版本是3.6.17 一、安装ethers yarn add ethers 如果像ether…

【Python】用xpath爬取2022热梗保存到txt中并生成词云

本文收录于《python学习笔记》专栏&#xff0c;这个专栏主要是我学习Python中遇到的问题&#xff0c;学习的新知识&#xff0c;或总结的一些知识点&#xff0c;我也是初学者&#xff0c;可能遇到的问题和大部分新人差不多&#xff0c;在这篇专栏里&#xff0c;我尽可能的分享出…

MySQL 索引 学习

索引 主键索引&#xff08;PRIMARY KEY&#xff09; 唯一标识&#xff0c;主键不可重复&#xff0c;只能有一个主键 唯一索引&#xff08;UNIQUE KEY&#xff09; 索引列 常规索引&#xff08;KEY/INDEX&#xff09;全文索引&#xff08;FullText&#xff09; 可以快速定位数据…

excel拆分技巧:如何快速对金额数字进行分列

金额数字分列&#xff0c;相信是做财务的小伙伴们经常遇到的问题。网上关于金额数字分列的方法很多&#xff0c;但用到的公式大都比较复杂。今天我们就来分享一个最简单的公式&#xff0c;仅用LEFT、RIGHT和COLUMN三个函数&#xff0c;就能达到效果&#xff01;在财务工作中&am…

Tapdata Cloud 场景通关系列:将数据导入阿里云 Tablestore,获得毫秒级在线查询和检索能力

【前言】作为中国的 “Fivetran/Airbyte”, Tapdata Cloud 自去年发布云版公测以来&#xff0c;吸引了近万名用户的注册使用。应社区用户上生产系统的要求&#xff0c;Tapdata Cloud 3.0 将正式推出商业版服务&#xff0c;提供对生产系统的 SLA 支撑。Tapdata 目前专注在实时数…

【论文阅读 CIKM2014】Extending Faceted Search to the General Web

文章目录ForewordMotivationMethodQuery facet generation:Facet feedbackEvaluationForeword This paper is from CIKM 2014, so we only consider the insightsI have read this paper last month and today i share this blogThere are many papers that have not been sha…

Docker网络原理详解

文章目录理解Docker0Docker 是如何处理容器网络访问的&#xff1f;Docker0网络模型图容器互联--Link自定义网络网络连通理解Docker0 查看本机IP ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00…

application.properties的作用

springboot这个配置文件可以配置哪些东西 官方配置过多了解原理 这个properties文件其实是可以删掉的&#xff0c;官方是不推荐使用这个文件的&#xff0c;可以将其换成安排application.yaml。名字不能变&#xff0c;因为SpringBoot使用的是一个全局的配置文件 application.…

linux系统中使用QT实现CAN通信的方法

大家好&#xff0c;今天主要和大家分享一下&#xff0c;如何使用QT中的CAN Bus的具体实现方法。 目录 第一&#xff1a;CAN Bus的基本简介 第二&#xff1a;CAN通信应用实例 第三&#xff1a;程序的运行效果 第一&#xff1a;CAN Bus的基本简介 从QT5.8开始&#xff0c;提供…

C语言-柔性数组与几道动态内存相关的经典笔试题(12.2)

目录 思维导图&#xff1a; 1.柔性数组 1.1柔性数组的特点 1.2柔性数组的使用 1.3柔性数组的优势 2.几道经典笔试题 2.1题目1 2.2题目2 2.3题目3 2.4题目4 写在最后&#xff1a; 思维导图&#xff1a; 1.柔性数组 1.1柔性数组的特点 例&#xff1a; #include <…

javaEE 初阶 — java对于的操作文件

文章目录1. File 类概述2. 代码示例2.1 示例1&#xff1a;以绝对路径为例&#xff0c;演示获取文件路径2.2 示例2&#xff1a;以相对路径为例&#xff0c;演示获取文件路径2.3 示例3&#xff1a;测试文件是否存在、测试是不是文件、测试是不是目录2.4 示例4&#xff1a;创建文件…

27.函数指针变量的定义, 调用函数的方法,函数指针数组

函数指针变量的定义 返回值类型&#xff08;*函数指针变量名&#xff09;&#xff08;形参列表&#xff09;; int( *p )( int , int );//定义了一个函数指针变量p&#xff0c;p指向的函数必须有一个整型的返回值&#xff0c;有两个整型参数。 int max(int x, int y) { } int m…

AMR-IE:一种利用抽象语义表示(AMR)辅助图编码解码的联合信息抽取模型

Abstract Meaning Representation Guided Graph Encoding and Decoding for Joint Information Extraction 论文&#xff1a;2210.05958.pdf (arxiv.org) 代码&#xff1a;zhangzx-uiuc/AMR-IE: The code repository for AMR guided joint information extraction model (NAAC…

【学习笔记】【Pytorch】七、卷积层

【学习笔记】【Pytorch】七、卷积层学习地址主要内容一、卷积操作示例二、Tensor&#xff08;张量&#xff09;是什么&#xff1f;三、functional.conv2d函数的使用1.使用说明2.代码实现四、torch.Tensor与torch.tensor区别五、nn.Conv2d类的使用1.使用说明2.代码实现六、卷积公…

C/C++ noexcept NRVO

为什么需要noexcept为了说明为什么需要noexcept&#xff0c;我们还是从一个例子出发&#xff0c;我们定义MyClass类&#xff0c;并且我们先不对MyClass类的移动构造函数使用noexceptclass MyClass { public:MyClass(){}MyClass(const MyClass& lValue){std::cout << …

使用语雀绘制 Java 中六大 UML 类图

目录 下载语雀 泛化关系&#xff08;Generalization&#xff09; 实现关系&#xff08;Realization&#xff09; 关联关系&#xff08;Association&#xff09; 依赖关系&#xff08;Dependency&#xff09; 聚合关系&#xff08;Aggregation&#xff09; 组合关系&…

【Python学习】列表和元组

前言 前四天每天更新了小白看的基础教程 今天开始就更新一下&#xff0c;深入一点的知识点吧 还是老话&#xff1a;刚接触python的宝子可以点击文章末尾名片进行交流学习的哦 什么是列表和元组 列表是动态的&#xff0c;长度大小不固定&#xff0c;可以随意地增加、删减或…