Loading...

文章背景图

scrcpy:在电脑上零侵入镜像并控制 Android 设备的开源投屏工具|部署与使用全指南

2026-10-28
0
- 字
- 分钟
|

官方信息表

项目 说明
项目名称 scrcpy
一句话定位 在电脑上通过 USB 或 TCP/IP 镜像并控制 Android 设备的开源投屏工具
所属组织 Genymobile(由 Romain Vimont 主导维护)
代码仓库 Genymobile/scrcpy
当前版本 v5.0.1
实现语言 C
官方网站 scrcpy 项目仓库
开源协议 Apache License 2.0
Star 数 153k+
支持平台 Linux、Windows、macOS

官方配图

scrcpy 在 Debian 上的运行截图

scrcpy 官方 Logo

项目背景

scrcpy 的名字读作 "screen copy",是 Genymobile 公司开源的一款 Android 屏幕镜像与控制工具。它的核心思路非常直接:通过 USB 或 TCP/IP 把 Android 设备的画面实时投射到电脑上,再用电脑的键盘和鼠标反向操作手机。整个过程不需要 root 权限,也不需要在手机上安装任何 APK——这一点是它和绝大多数投屏类软件最大的区别。

README 在开篇就用醒目警告强调:GitHub 上的 Genymobile/scrcpy 是项目唯一官方来源,不要从任何第三方网站下载所谓的 scrcpy 安装包,即便那些网站名字里也带 "scrcpy"。这是因为早期该项目走红后,国内出现过不少捆绑广告、甚至带恶意代码的二次打包版本,作者因此专门在 README 顶部加了这条警示。

从技术原理上看,scrcpy 在设备端通过 Android 调试桥(ADB)运行一个极小的服务端进程,利用 Android 系统自带的 MediaCodec 把屏幕编码成 H.264/H.265 视频流,再通过 USB 或 TCP 隧道传给电脑端做解码渲染。由于编码和解码都走系统硬件通路,所以它的延迟可以压到 35~70ms,启动后大约 1 秒就能出第一帧画面。README 把这种轻量、低延迟的设计总结为八个关键词:lightness(轻量)、performance(性能)、quality(画质)、low latency(低延迟)、low startup time(启动快)、non-intrusiveness(不侵入)、user benefits(无账号无广告)、freedom(自由开源)。

作者 Romain Vimont 是 Genymobile 的工程师,最早在 2018 年 3 月发布了这个项目。他在自己的博客里写过一篇《Introducing scrcpy》,讲述了最初为什么要写这个工具:当时市面上的投屏方案要么笨重、要么收费、要么要求在手机端装一堆东西,他希望有一个命令行就能跑起来、对手机零侵入的轻量替代品。项目发布后迅速在开发者社区走红,2023 年发布的 2.0 版本加入了音频转发能力,作者同样在博客里写了发布说明。

到 2026 年,scrcpy 已经迭代到 v5.0.1,Star 数超过 15 万,是 GitHub 上最热门的 Android 工具类项目之一。它被广泛用于移动应用测试、远程协助、手游投屏直播、自动化调试等场景。和商业软件相比,scrcpy 的最大优势是完全免费、无广告、不需要注册账号,而且所有源码都在 Apache 2.0 协议下开放,企业可以放心地在内网环境中批量部署。

核心特性逐条翻译

README 的 Features 一节列出了 scrcpy 的主要能力,逐条翻译如下:

音频转发(audio forwarding)。 从 Android 11(API 30)开始,scrcpy 不仅能投屏,还能把设备的音频同步转发到电脑扬声器。这意味着你可以在电脑上直接听手机视频、游戏的声音,而不用把音量开到手机上。音频流和视频流走的是同一条 ADB 隧道,不需要额外开端口。

屏幕录制(recording)。 可以在镜像的同时把设备画面录制成 MP4 文件,而不需要额外装录屏软件。录制的文件直接保存在电脑磁盘上,不占用手机存储空间。

虚拟显示(virtual display)。 可以在 Android 上创建一块和主屏幕完全独立的虚拟显示器,在里面单独启动 App,而不影响你正在用的主屏。README 给出的典型用法是 scrcpy --new-display=1920x1080 --start-app=org.videolan.vlc,在一块新虚拟屏里单独打开 VLC。这个功能非常适合需要在手机上跑两个相互隔离的应用实例的场景。

息屏镜像(screen off mirroring)。 可以在关闭 Android 设备物理屏幕的情况下继续投屏,既省电又避免旁人看到你手机上的内容。配合电脑端操作,手机可以一直放在桌上不动。

双向复制粘贴(copy-paste)。 电脑和手机之间可以双向共享剪贴板,在电脑上复制的文字直接在手机上粘贴,反之亦然。这对经常在电脑和手机之间传递验证码、链接的人来说非常实用。

画质可调(configurable quality)。 可以限制最大分辨率、最大帧率、码率,以在低性能设备或弱网络环境下换取更流畅的体验。README 特别提示,把分辨率降到 1024 往往能明显改善帧率。

摄像头镜像(camera mirroring)。 从 Android 12 开始,scrcpy 可以直接把手机摄像头的画面采集出来投到电脑上,而不是采集屏幕。这适合做摄像头测试、直播辅助等场景。

作为电脑摄像头(V4L2,仅限 Linux)。 在 Linux 上,可以把镜像出来的画面直接暴露成 /dev/videoN 设备,让其他应用(比如会议软件)把它当成一个真实摄像头来调用。这个功能在远程协助、直播推流时特别有用。

物理键盘鼠标模拟(HID)。 scrcpy 可以把电脑的键盘、鼠标模拟成直接插在 Android 上的 USB 外设(通过 UHID),这样游戏、输入法对按键的识别会更接近原生。普通模式下,电脑键盘输入会被转换成 Android 的触摸事件;开启 HID 模式后,输入会被识别为物理按键,游戏兼容性更好。

手柄支持(gamepad)。 可以把电脑上插的游戏手柄直接映射给 Android 设备使用。对于喜欢在电脑上投屏玩手机游戏的人来说,这是一个刚需功能。

OTG 模式。 完全不依赖 USB 调试,直接以 USB 外设身份控制手机,适合那些不允许开启调试模式的设备,比如公司配发的工作机。开启 OTG 后,scrcpy 不会在手机上启动任何服务端进程,而是把电脑的键盘、鼠标信号直接通过 USB HID 协议传给手机,相当于你在电脑上插了一个 USB 键盘和鼠标。

环境要求

README 的 Prerequisites 一节给出了明确门槛:

  • Android 设备系统版本至少为 Android 5.0(API 21);
  • 如果需要使用音频转发功能,设备系统必须为 Android 11(API 30)或更高;
  • 设备端需要在开发者选项中开启"USB 调试"(官方开启指引);
  • 在部分厂商(尤其是小米)设备上,可能还需要额外开启"USB 调试(安全设置)"这一项独立开关,否则会遇到 INJECT_EVENTS 权限报错,开启后需重启设备;
  • OTG 模式下不需要开启 USB 调试。

电脑端没有硬性的操作系统版本要求,只要能运行 scrcpy 的预编译包或自行编译即可。Windows 用户建议使用 Windows 10 及以上版本,macOS 用户建议使用 macOS 12 及以上版本以获得完整的音频转发支持。

部署步骤

方式一:直接下载官方预编译包(推荐新手)

README 在 "Get the app" 一节按操作系统给出了三个下载入口,分别对应 Linux、Windows、macOS:

以 Windows 为例,下载解压后进入目录,在手机开启 USB 调试并通过数据线连接电脑后,双击 scrcpy.exe 或在命令行执行 scrcpy 即可看到手机画面。macOS 用户可以直接用 Homebrew 安装:brew install scrcpy。Linux 发行版大多在官方源里打包了 scrcpy,直接用包管理器安装即可,具体命令以 doc/linux.md 为准。

方式二:从源码编译

如果你的发行版源里版本太旧,或者想体验最新特性,可以从源码编译。README 在 doc/build.md 给出了完整的编译步骤,依赖主要包括 SDL2、ffmpeg 以及 Android SDK 中的 adb 工具链。编译完成后会生成 scrcpy 可执行文件,直接运行即可。编译过程中需要注意,Android SDK 版本要和 README 中声明的版本保持一致,否则可能出现协议不兼容的问题。

连接前准备

无论用哪种方式安装,首次连接前都要做三件事:

  1. 手机设置 → 关于手机 → 连续点击版本号,开启开发者选项;
  2. 进入开发者选项,打开"USB 调试";
  3. 用数据线连接电脑,在手机弹窗里勾选"始终允许此电脑调试"。

连接成功后,命令行执行 scrcpy 即可开始镜像。如果连接的是多台设备,需要用 --serial 参数指定设备序列号。

无线连接的完整流程如下:先用数据线把手机和电脑连在一起,执行 adb tcpip 5555,然后拔掉数据线,执行 adb connect <手机IP>:5555,最后运行 scrcpy --serial=<手机IP>:5555。这种方式下,画面延迟会比 USB 略高,但省去了数据线的束缚,适合需要在客厅电视上投屏演示、或者工位不方便接线的场景。README 在 doc/tunnels.md 里还介绍了通过 SSH 隧道、端口转发等方式跨网络访问手机的高级用法。

使用方法

README 的 Usage examples 一节给出了几条最常用的命令,原样摘录并解释如下:

基础投屏。 默认不带参数直接运行即可:

scrcpy

降低分辨率以提升性能。 README 提示,把分辨率降到 1024 往往能明显改善帧率:

scrcpy -m1024

用 H.265 编码、限制 1920 宽、60fps、关闭音频、用物理键盘模拟:

scrcpy --video-codec=h265 --max-size=1920 --max-fps=60 --no-audio --keyboard=uhid
scrcpy --video-codec=h265 -m1920 --max-fps=60 --no-audio -K  # 简写

在新虚拟屏里启动 VLC:

scrcpy --new-display=1920x1080 --start-app=org.videolan.vlc

在新虚拟屏里用 H.265、16Mbps 码率启动 VLC,并保持屏幕常亮:

scrcpy --new-display -x --keep-active --start-app=org.videolan.vlc --video-codec=h265 -b16M

录制摄像头到 MP4:

scrcpy --video-source=camera --video-codec=h265 --camera-size=1920x1080 --record=file.mp4

把前置摄像头作为 Linux 摄像头输出(不本地播放):

scrcpy --video-source=camera --camera-size=1920x1080 --camera-facing=front --v4l2-sink=/dev/video2 --no-playback

OTG 模式(不需要 USB 调试):

scrcpy --otg

用手柄控制手机:

scrcpy --gamepad=uhid
scrcpy -G  # 简写

README 还提醒了几个必会的快捷键:右键触发返回键、中键触发 Home 键、Alt+f 切换全屏。完整的快捷键列表见 doc/shortcuts.md。

在实际使用中,README 建议你先跑一次不带任何参数的 scrcpy 确认基础链路通畅,再根据需要叠加参数。比如投屏卡顿,先试 -m1024 降分辨率;声音不同步,检查设备系统版本是否达到 Android 11;想在电脑上玩手游,加上 --keyboard=uhid --gamepad=uhid 把输入设备模拟成物理外设。所有参数都在 README 链接出去的十几份文档里有详细说明,建议第一次用的时候按 Connection、Video、Control 的顺序读一遍。

常见问题(FAQ)

问:连接后报错 INJECT_EVENTS 权限不足怎么办? 这是小米等厂商定制 ROM 的常见问题。README 明确说明,需要在开发者选项里额外开启"USB 调试(安全设置)"这一项(它和普通的 USB 调试是两个独立开关),开启后重启手机即可。

问:必须 root 手机吗?必须在手机上装 App 吗? 都不需要。README 在开篇就强调 scrcpy 不要求 root,也不在设备上留下任何安装包,所有功能都通过 ADB 调试通道完成。

问:可以无线连接吗? 可以。README 在 doc/connection.md 里专门有一节讲 TCP/IP 无线连接,先用 USB 跑一遍 adb tcpip 5555,再拔掉数据线用 scrcpy --serial=<手机IP>:5555 即可。

问:为什么我手机没声音? 音频转发需要 Android 11 及以上系统。如果系统版本低于 Android 11,scrcpy 只能投屏不能传声音,这是系统限制,不是软件 bug。

问:可以把手机摄像头当电脑摄像头用吗? 可以,但有两个前提:设备系统为 Android 12+,并且电脑端是 Linux(通过 V4L2 把画面暴露成 /dev/videoN)。Windows 和 macOS 目前不支持 V4L2 输出。

问:官方下载地址是哪个? README 顶部红色警告专门说明,唯一官方来源是 Genymobile/scrcpy 的 Releases 页面,不要从任何第三方下载站获取安装包。

问:多台设备同时连接怎么办? 用 --serial 参数指定设备序列号即可。每台设备独立开一个 scrcpy 进程,互不干扰。序列号可以通过 adb devices 命令查看。

问:scrcpy 支持 iOS 设备吗? 不支持。README 明确说明 scrcpy 只针对 Android 系统,因为它依赖 Android 的 ADB 调试通道和 MediaCodec 硬件编码能力,iOS 没有对应的开放接口。

跳转链接

评论交流

文章目录