ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Scrcpy 完全指南:如何镜像、控制并录制安卓设备

Scrcpy 完全指南:如何镜像、控制并录制安卓设备

Scrcpy 完全指南:如何镜像、控制并录制安卓设备

【免费下载链接】scrcpyDisplay and control your Android device项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy

Scrcpy 是一款开源的安卓投屏与控制工具:设备接入后,屏幕和声音会被镜像到电脑,你可以直接用鼠标键盘操作手机。手机侧只需要打开 USB 调试,免安装应用、免 Root,适合应用调试、教学演示、手游录屏这类场景。传统投屏往往要在模糊画面和高延迟之间做取舍,而它只传输硬件编码后的压缩码流,官方给出的延迟区间是 35~70ms,低延迟投屏的同时,首帧画面约 1 秒就能出现。

三步跑起来:安装、备机、出画面

第一步的目标只有一个:让电脑窗口里出现手机屏幕。

1. 安装客户端

客户端覆盖 Linux、Windows、macOS 三个平台。在 Linux 上想从源码装最新正式版,可以克隆仓库后执行安装脚本(依赖安装方法见 doc/linux.md;Windows 与 macOS 直接下载官方发布包解压即可):

git clone https://gitcode.com/GitHub_Trending/sc/scrcpy cd scrcpy ./install_release.sh

2. 备机

  • 系统版本要求 Android 5.0(API 21)及以上;音频镜像需要 Android 11+。
  • 在开发者选项里开启「USB 调试」,用数据线连上电脑,终端执行adb devices能看到序列号即连上了。
  • 部分机型(如小米)还要额外勾选「USB 调试(安全设置)」并重启一次,否则键盘鼠标事件会被系统拒绝。

3. 启动出画面

终端里直接运行:

scrcpy

约 1 秒后,设备画面就会出现在窗口里。

窗口出来后就可以上手操作:鼠标右键触发「返回」,中键触发「主页」,Alt+f切换全屏。

画面是怎么传过来的

可以把它理解成一条专用信道:ADB 就像电脑和手机之间跑「跑腿」的服务,专门负责把画面带回来、把你的操作送过去。

完整链路一句话就能记住:捕获 → 编码 → 传输 → 解码 → 显示。

  1. 设备端用系统编码器 MediaCodec 把屏幕实时编码成 H.264 或 H.265 压缩码流;
  2. 压缩码流走 ADB 隧道(USB 或 TCP/IP)传回电脑,数据量很小;
  3. 客户端用 FFmpeg 解码,再由 SDL 渲染进窗口;
  4. 你敲下的键鼠事件沿同一条隧道反向注入设备。

正因为线上跑的是压缩流而不是原始帧,延迟才能稳定在 35~70ms 的区间。音频走同样的思路:Android 11+ 默认转发设备声音,细节见音频文档。

六个值得背下来的参数

参数很多,日常翻牌率最高的就下面几个,完整清单随时可查scrcpy --help或man scrcpy。

参数作用最小示例
-m限制最大分辨率,调低后流畅度常有明显提升scrcpy -m 1080
-b码率,越大越清晰,对链路要求越高scrcpy -b 6M
--max-fps限制帧率scrcpy --max-fps 60
--window-width/--window-height指定窗口尺寸scrcpy --window-width 800 --window-height 450
--window-title给窗口起个名字scrcpy --window-title "产品演示"
--record镜像的同时把视频录到文件scrcpy --record file.mp4

官方 README 也把「先降分辨率」列为第一条性能建议:设备偏弱时,优先加-m调低上限,往往比折腾其他参数见效更快。

实战三招

免 USB 线的无线投屏 📶

  1. 准备:电脑与手机连同一个 Wi-Fi,手机先用 USB 插着电脑。
  2. 执行:把 ADB 切到网络模式,再连设备 IP(默认端口 5555):
adb tcpip 5555 adb connect 192.168.1.100:5555 scrcpy
  1. 验证:终端提示连接成功、窗口正常出画面后,拔掉 USB 线缆仍可持续投屏。IP 不知道就用adb shell ip route | awk '{print $9}'打出来;懒得手动的话,直接scrcpy --tcpip会自动探测 IP 并建连,完整流程见连接文档。

常见异常:连接失败时先adb kill-server && adb start-server重启 ADB 服务,确认防火墙放行后再试。

多设备同屏 📱

  1. 准备:执行adb devices记下每台设备的序列号。
  2. 执行:每个序列号起一个进程,各自独立窗口:
scrcpy -s SERIAL_A & scrcpy -s SERIAL_B
  1. 验证:两个窗口同时出现,可分别操作、分别调参。也可以设环境变量ANDROID_SERIAL指定默认目标,省去每次带-s。

常见异常:多设备连接却没加-s时,scrcpy 会拒绝猜测并要求你明确选择——这是保护机制,补上序列号即可。

按场景调参 🎮

不用新增参数,把上表组合一下就行:

  • 手游 / 直播:scrcpy -b 8M -m 1080 --max-fps 60,把画质和帧率顶上去;想同时留档就再加--record file.mp4。
  • 教学 / 演示:scrcpy --window-title "产品演示" --always-on-top,固定窗口名并常驻最前。
  • 低带宽环境:scrcpy -b 2M -m 720,先保证画面不断。

和同类投屏工具怎么选

维度ScrcpyVysorAirDroid
典型延迟35~70ms100~200ms150~300ms
设备端需装应用不需要需要需要
支持平台Linux / Windows / macOSWindows / macOSWindows / macOS
是否开源是否否

一句话结论:对延迟敏感、或不想在手机上装任何东西,选 Scrcpy;想要双击即用的图形界面、且接受手机端装客户端,商业工具更省心。

避坑 FAQ

问:需要 Root 吗?手机上要装 App 吗? 答:都不需要。前提是开启 USB 调试,投屏与控制全程不碰 Root,断开后设备上也不留任何残留。

问:为什么听不到手机里的声音? 答:音频转发仅支持 Android 11+,且 Android 11 需要保持屏幕解锁状态下启动;Android 12 及以上开箱即用;Android 10 及更早版本会自动禁用音频。

问:无线投屏画质不如 USB,是线路问题吗? 答:画质由码率、分辨率参数决定,与连接方式无关,Wi-Fi 信号好时无线效果可以追平 USB。可用adb shell dumpsys wifi查看信号强度(signalLevel 0-4,数值越高越好)。

问:画面卡顿,先动哪个参数? 答:先用-m把分辨率上限调低,例如scrcpy -m 1024,官方文档把这列为头号性能技巧;还有余量再考虑--max-fps和-b。

问:命令行工具是不是很难上手? 答:常用功能基本被上面六个参数覆盖,剩下的可以scrcpy --help或man scrcpy自查;社区也有不少图形界面封装,想要可视化操作可以另寻工具。

问:手机上「返回」键按哪? 答:鼠标右键就是「返回」,中键是「主页」,不用伸手去点设备,这是最常用的一对绑定。

写在最后

Scrcpy 把捕获、编码、传输、解码、显示的整条链路压到接近实时的延迟,同时让设备端保持干净,这两点构成了它相对多数投屏工具的核心差异。如果第一次使用,建议先试这一组参数:

scrcpy -m 1080 -b 6M

画面稳定之后,再按上面的无线、多设备、场景调参三招按需扩展。

【免费下载链接】scrcpyDisplay and control your Android device项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy

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

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进