草庐IT

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

Python代码大全 2023-08-14 原文

QtScrcpy

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

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

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

自定义按键映射

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

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

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

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

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

群控

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

感谢

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

比较

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 即可

有关C++版Android实时投屏软件系统源码,安卓手机投屏软件源码,无需root权限的更多相关文章

  1. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  2. 怎样用一台手机做自媒体? - 2

    其实做自媒体的成本并不高,入门只需要一部手机即可!在手机上找视频素材、使用手机剪辑视频、最后使用手机发布视频作品获得收益!方法并不难,今天这期内容就来给粉丝们分享一种小方法,每天稳定收益100-300,抓紧点赞收藏!1、找素材(1)使用手机拍摄自己喜欢的经典段落,使用程序把文案内容提取出来(2)也可以在豆瓣、知乎、微博等网站中找一些自己需要的文案素材(3)把文案进行润色修改,可以加入一些自己的观点(4)视频素材可以使用软件中自带的素材,也可以在素材网站中下载完整版的素材2、文案配音(1)把复制好的文案直接导入小程序中(2)调整音色、音调后一键合成音频即可(3)可以选择自己朗读配音,需要花一点时

  3. UE4 源码阅读:从引擎启动到Receive Begin Play - 2

    一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame

  4. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  5. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  6. ruby - rbenv 安装权限被拒绝 - 2

    大家好,我正在尝试设置一个开发环境,并且我一直在关注以下教程:Linktotutorial我做得不是很好,除了最基本的版本控制内容外,我对终端命令没有任何实际经验。我点击了第一个链接并尝试运行source~/.bash_profile我得到了错误;mkdir:/usr/local/rbenv/shims:权限被拒绝mkdir:/usr/local/rbenv/versions:权限被拒绝现在每次我加载终端时都会出现错误。bash_profile的内容;exportPATH=/usr/local/rbenv/bin:$PATHexportRBENV_ROOT=/usr/local/rbe

  7. ruby - 在没有 root 的情况下安装 Jekyll - 2

    我想在共享服务器上建立一个jekyll博客。当我尝试安装Jekyll时,我得到“您没有写权限”。我该如何在没有root或sudo的情况下解决这个问题?更多细节:我在共享服务器上有空间,但没有根访问权限。我无法安装Ruby,尽管托管公司应我的要求安装了它。当我尝试安装Jekyll时我使用user@hosting.org[~]#geminstalljekyll这是我得到的回应:ERROR:Whileexecutinggem...(Gem::FilePermissionError)Youdon'thavewritepermissionsintothe/usr/lib/ruby/gems/1.

  8. ruby-on-rails - Rails 3,在RAILS_ROOT上方显示来自本地文件系统的jpg图片 - 2

    我正在尝试找出一种方法来显示来自不在RAILS_ROOT下(在RedHat或Ubuntu环境中)的已安装文件系统的图像。我不想使用符号链接(symboliclink),因为这个应用程序实际上是通过Tomcat部署的,而当我关闭Tomcat时,Tomcat会尝试跟随符号链接(symboliclink)并删除挂载中的所有图像。由于这些文件的数量和大小,将图像放在public/images下也不是一种选择。我查看了send_file,但它只会显示一张图片。我需要在一个格式良好的页面中显示6个请求的图像。由于膨胀,我宁愿不使用Base64编码,但我不知道如何将图像数据与呈现的页面一起传递下去。

  9. ruby-on-rails - 为什么用户必须输入 7 位数的 Twitter PIN 才能授予我的应用程序访问权限? - 2

    我正在为我的用户实现一些ruby​​onrails代码推特内容。我正在创建正确的oauth链接...类似http://twitter.com/oauth/authorize?oauth_token=y2RkuftYAEkbEuIF7zKMuzWN30O2XxM8U9j0egtzKv但在我的测试帐户授予对twitter的访问权限后,它会弹出一个页面,上面写着“您已成功授予对.我不知道用户应该在哪里输入此PIN以及他们为什么必须这样做。我认为这不是必要的步骤。Twitter应该将用户重定向到我在应用程序设置中提供的回调URL。有谁知道为什么会这样?更新我找到了thisarticle声明我需

  10. ruby - rbenv:权限被拒绝 - 2

    我正在关注Ryan的RailsCast第339集。我已经安装了rbenv并且可以运行ruby-v。我退出了我的session,当我试图返回时(通过root的sudeployer,我得到了这个错误/home/deployer/.rbenv/bin/rbenv:line20:cd:/root:Permissiondenied这是rbenv文件:#!/usr/bin/envbashset-e[-n"$RBENV_DEBUG"]&&set-xresolve_link(){$(type-pgreadlinkreadlink|head-1)"$1"}abs_dirname(){localcwd="

随机推荐