Skip to content
Jesús Jiménez Sánchez edited this page May 21, 2024 · 3 revisions

Only the original FAQ is guaranteed to be up-to-date.

只有原版的 FAQ.md是保证最新的。

Current version is based on 28054cd

本文根据28054cd进行翻译。

常见问题

这里是一些常见的问题以及他们的状态。

adb 相关问题

scrcpy 执行 adb 命令来初始化和设备之间的连接。如果 adb 执行失败了, scrcpy 就无法工作。

在这种情况中,将会输出这个错误:

ERROR: "adb get-serialno" returned with value 1

这通常不是 scrcpy 的bug,而是你的环境的问题。

要找出原因,请执行以下操作:

adb devices

找不到adb

你的PATH中需要能访问到adb

在Windows上,当前目录会包含在PATH中,并且adb.exe也包含在发行版中,因此它应该是开箱即用(直接解压就可以)的。

设备未授权

error: device unauthorized.
This adb server's $ADB_VENDOR_KEYS is not set
Try 'adb kill-server' if that seems wrong.
Otherwise check for a confirmation dialog on your device.

连接时,在设备上应该会打开一个弹出窗口。 您必须授权 USB 调试。

如果没有打开,参见stackoverflow.

未检测到设备

error: no devices/emulators found

确认已经正确启用 adb debugging.

如果你的设备没有被检测到,你可能需要一些驱动 (在 Windows上)。这里有一个单独的 适用于Google设备的USB驱动.

已连接多个设备

如果连接了多个设备,您将遇到以下错误:

error: more than one device/emulator

必须提供要镜像的设备的标识符:

scrcpy -s 01234567890abcdef

注意,如果你的设备是通过 TCP/IP 连接的, 你将会收到以下消息:

adb: error: more than one device/emulator
ERROR: "adb reverse" returned with value 1
WARN: 'adb reverse' failed, fallback to 'adb forward'

这是意料之中的 (由于旧版安卓的一个bug, 请参见 #5),但是在这种情况下,scrcpy会退回到另一种方法,这种方法应该可以起作用。

adb版本之间冲突

adb server version (41) doesn't match this client (39); killing...

同时使用多个版本的adb时会发生此错误。你必须查找使用不同adb版本的程序,并在所有地方使用相同版本的adb

你可以覆盖另一个程序中的adb二进制文件,或者通过设置ADB环境变量来让 scrcpy 使用特定的adb二进制文件。

set ADB=/path/to/your/adb
scrcpy

设备断开连接

如果 scrcpy 在警告“设备连接断开”的情况下自动中止,那就意味着adb连接已经断开了。

请尝试使用另一条USB线或者电脑上的另一个USB接口。请参看 #281#283

控制相关问题

鼠标和键盘不起作用

在某些设备上,您可能需要启用一个选项以允许 模拟输入。 在开发者选项中,打开:

USB调试 (安全设置)
允许通过USB调试修改权限或模拟点击

特殊字符不起作用

可输入的文本被限制为ASCII字符。也可以用一些小技巧输入一些带重音符号的字符,但是仅此而已。参见#37

自 Linux 上的 scrcpy v1.20 之后,可以模拟物理键盘 (HID)。

客户端相关问题

效果很差

如果你的客户端窗口分辨率比你的设备屏幕小,则可能出现效果差的问题,尤其是在文本上(参见 #40)。

为了提升降尺度的质量,如果渲染器是OpenGL并且支持mip映射,就会自动开启三线性过滤。

在Windows上,你可能希望强制使用OpenGL:

scrcpy --render-driver=opengl

你可能还需要配置缩放行为

scrcpy.exe > Properties > Compatibility > Change high DPI settings > Override high DPI scaling behavior > Scaling performed by: Application.

Wayland相关的问题

在Linux上,SDL默认使用x11。可以通过SDL_VIDEODRIVER环境变量来更改视频驱动

export SDL_VIDEODRIVER=wayland
scrcpy

在一些发行版上 (至少包括 Fedora), libdecor 包必须手动安装。

参见 #2554#2559

KWin compositor 崩溃

在Plasma桌面中,当 scrcpy 运行时,会禁用compositor。

一种解决方法是, 禁用 "Block compositing".

崩溃

异常

可能有很多原因。一个常见的原因是您的设备无法按给定清晰度进行编码:

ERROR: Exception on thread Thread[main,5,main]
android.media.MediaCodec$CodecException: Error 0xfffffc0e
...
Exit due to uncaughtException in main thread:
ERROR: Could not open video stream
INFO: Initial texture: 1080x2336

或者

ERROR: Exception on thread Thread[main,5,main]
java.lang.IllegalStateException
        at android.media.MediaCodec.native_dequeueOutputBuffer(Native Method)

请尝试使用更低的清晰度:

scrcpy -m 1920
scrcpy -m 1024
scrcpy -m 800

自 scrcpy v1.22以来,scrcpy 会自动在失败前以更低的分辨率重试。这种行为可以用--no-downsize-on-error关闭。

你也可以尝试另一种 编码器

如果您在 Android 12 上遇到此异常,则只需升级到 scrcpy >= 1.18 (见 #2129):

> ERROR: Exception on thread Thread[main,5,main]
java.lang.AssertionError: java.lang.reflect.InvocationTargetException
    at com.genymobile.scrcpy.wrappers.SurfaceControl.setDisplaySurface(SurfaceControl.java:75)
    ...
Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at com.genymobile.scrcpy.wrappers.SurfaceControl.setDisplaySurface(SurfaceControl.java:73)
    ... 7 more
Caused by: java.lang.IllegalArgumentException: displayToken must not be null
    at android.view.SurfaceControl$Transaction.setDisplaySurface(SurfaceControl.java:3067)
    at android.view.SurfaceControl.setDisplaySurface(SurfaceControl.java:2147)
    ... 9 more

Windows命令行

从 v1.22 开始,增加了一个“快捷方式”,可以直接在 scrcpy 目录打开一个终端。双击open_a_terminal_here.bat,然后输入你的命令。 例如:

scrcpy --record file.mkv

您也可以打开终端并手动转到 scrcpy 文件夹:

  1. 按下 Windows+r,打开一个对话框。

  2. 输入 cmd 并按 Enter,这样就打开了一个终端。

  3. 通过输入以下命令,切换到你的 scrcpy 所在的目录 (根据你的实际位置修改路径):

    cd C:\Users\user\Downloads\scrcpy-win64-xxx

    然后按 Enter

  4. 输入你的命令。比如:

    scrcpy --record file.mkv

如果你打算总是使用相同的参数,在scrcpy目录创建一个文件 myscrcpy.bat (启用 显示文件拓展名 避免混淆),文件中包含你的命令。例如:

scrcpy --prefer-text --turn-screen-off --stay-awake

然后只需双击刚刚创建的文件。

你也可以编辑 scrcpy-console.bat 或者 scrcpy-noconsole.vbs(的副本)来添加参数。