首页 > 技术文章 > scrcpy

WoodHower 2021-07-30 01:16 原文

捕获配置

缩小尺寸

有时,以较低的清晰度镜像 Android 设备以提高性能很有用。

将宽度和高度限制为某个值(例如 1024):

scrcpy --max-size 1024
scrcpy -m 1024   #短版

计算另一个维度以保留设备纵横比。这样,1920×1080 的设备将以 1024×576 镜像。

更改比特率

默认比特率为 8 Mbps。要更改视频比特率(例如,更改为 2 Mbps):

scrcpy --bit-rate 2M
scrcpy -b 2M   #短版

限制帧率

可以限制捕获帧速率:

scrcpy --max-fps 15

自 Android 10 起正式支持此功能,但可能适用于较早版本。

庄稼

设备屏幕可能会被裁剪以仅镜像屏幕的一部分。

例如,这对于仅镜像 Oculus Go 的一只眼睛很有用:

scrcpy --crop 1224:1440:0:0    # 1224x1440 偏移 (0,0)

如果--max-size还指定了,则在裁剪后应用调整大小。

锁定视频方向

要锁定镜像的方向:

scrcpy --lock-video-orientation      #初始(当前)方向
scrcpy --lock-video-orientation=0    #自然方向
scrcpy --lock-video-orientation=1    #逆时针 90° 
scrcpy --lock-video-orientation= 2    # 180° 
scrcpy --lock-video-orientation=3    # 90° 顺时针

这会影响记录方向。

窗口也可以被转动独立地。

编码器

有些设备有多个编码器,其中一些可能会导致问题或崩溃。可以选择不同的编码器:

scrcpy --encoder OMX.qcom.video.encoder.avc

要列出可用的编码器,您可以传递一个无效的编码器名称,错误将给出可用的编码器:

scrcpy --encoder _

捕获

记录

可以在镜像时录制屏幕:

scrcpy --record file.mp4
scrcpy -r 文件.mkv

要在录制时禁用镜像:

scrcpy --no-display --record file.mp4
scrcpy -Nr 文件.mkv
#使用 Ctrl+C 中断录制

“跳过的帧”会被记录下来,即使它们不是实时显示的(出于性能原因)。在设备上带有时间戳,因此数据包延迟变化不会影响录制的文件。

v4l2环回

在 Linux 上,可以将视频流发送到 v4l2 环回设备,以便任何支持 v4l2 的工具都可以像网络摄像头一样打开 Android 设备。

v4l2loopback必须安装该模块

sudo apt install v4l2loopback-dkms

创建 v4l2 设备:

须藤 modprobe v4l2loopback

这将在 中创建一个新的视频设备/dev/videoN,其中N是一个整数(更多选项可用于创建多个设备或具有特定 ID 的设备)。

列出启用的设备:

#需要 v4l-utils 包
v4l2-ctl --list-devices

#简单但可能足够了
ls /dev/video *

要使用 v4l2 接收器启动 scrcpy:

scrcpy --v4l2-sink=/dev/videoN
scrcpy --v4l2-sink=/dev/videoN --no-display   #禁用镜像窗口
scrcpy --v4l2-sink=/dev/videoN -N             #短版

(用N设备 ID替换,用 核对ls /dev/video*

启用后,您可以使用支持 v4l2 的工具打开视频流:

ffplay -i /dev/videoN
vlc v4l2:///dev/videoN    # VLC 可能会增加一些缓冲延迟

例如,您可以在OBS 中捕获视频

联系

无线的

Scrcpy用于adb与设备通信,adb可以通过 TCP/IP连接到设备:

  1. 将设备连接到与计算机相同的 Wi-Fi。

  2. 获取您的设备 IP 地址,在设置 → 关于手机 → 状态,或通过执行以下命令:

    adb shell ip 路由| awk ' {打印 $9} '
  3. 您的设备上启用TCP / IP ADB: adb tcpip 5555

  4. 拔下您的设备。

  5. 连接到您的设备:adb connect DEVICE_IP:5555 (替换DEVICE_IP)

  6. scrcpy像往常一样

降低比特率和定义可能很有用:

scrcpy --bit-rate 2M --max-size 800
scrcpy -b2M -m800   #短版

多设备

如果在 中列出了多个设备,则adb devices必须指定串行

scrcpy --serial 0123456789abcdef
scrcpy -s 0123456789abcdef   #短版

如果设备通过 TCP/IP 连接:

scrcpy --serial 192.168.0.1:5555
scrcpy -s 192.168.0.1:5555   #短版

您可以为多个设备启动多个scrcpy实例

设备连接时自动启动

您可以使用AutoAdb

autoadb scrcpy -s ' {} '

SSH隧道

要连接到远程设备,可以将本地adb客户端连接到远程adb服务器(前提是它们使用相同版本的adb 协议):

adb kill-server     #杀死 5037 上的本地 adb 服务器
ssh -CN -L5037:localhost:5037 -R27183:localhost:27183 your_remote_computer
#保持打开状态

从另一个终端:

scrcpy

为避免启用远程端口转发,您可以改为强制转发连接(注意-L代替-R):

adb kill-server     #杀死 5037 上的本地 adb 服务器
ssh -CN -L5037:localhost:5037 -L27183:localhost:27183 your_remote_computer
#保持打开状态

从另一个终端:

scrcpy --force-adb-forward

与无线连接一样,降低质量可能很有用:

scrcpy -b2M -m800 --max-fps 15

窗口配置

标题

默认情况下,窗口标题是设备型号。它可以改变:

scrcpy --window-title '我的设备'

位置和尺寸

可以指定初始窗口位置和大小:

scrcpy --window-x 100 --window-y 100 --window-width 800 --window-height 600

无边界

要禁用窗口装饰:

scrcpy --window-borderless

总在最前面

要使 scrcpy 窗口始终在最上面:

scrcpy --always-on-top

全屏

该应用程序可以直接全屏启动:

scrcpy --fullscreen
scrcpy -f   #短版

然后可以使用MOD+动态切换全屏f

回转

窗口可以旋转:

scrcpy --rotation 1

可能的值是:

  • 0: 没有旋转
  • 1: 逆时针 90 度
  • 2: 180 度
  • 3: 顺时针 90 度

旋转也可以通过MOD (left)MOD (right)动态改变

请注意,scrcpy管理 3 种不同的旋转:

  • MOD+r请求设备在纵向和横向之间切换(当前运行的应用程序可能会拒绝,如果它不支持请求的方向)。
  • --lock-video-orientation更改镜像方向(从设备发送到计算机的视频的方向)。这会影响录制。
  • --rotation(或MODMOD)仅旋转窗口内容。这仅影响显示,不影响录音。

其他镜像选项

只读

要禁用控件(可以与设备交互的所有内容:输入键、鼠标事件、拖放文件):

scrcpy --no-control
scrcpy -n

展示

如果有多个显示器可用,则可以选择要镜像的显示器:

scrcpy --display 1

可以通过以下方式检索显示 ID 列表:

adb shell dumpsys display    #在输出中搜索“mDisplayId=”

只有在设备至少运行 Android 10 时才能控制辅助显示器(否则它会以只读方式镜像)。

保持清醒

为了防止设备在插入设备时延迟一段时间后进入睡眠状态:

scrcpy --保持清醒
scrcpy -w

scrcpy 关闭时恢复初始状态。

关闭屏幕

可以使用命令行选项在启动镜像时关闭设备屏幕:

scrcpy --turn-screen-off
scrcpy -S

或者随时MODo

要重新打开它,请按MODShifto

在 Android 上,该POWER按钮始终打开屏幕。为方便起见,如果 POWER通过 scrcpy 发送(通过右键单击或MODp),它将在一小段延迟后强制关闭屏幕(尽最大努力)。物理POWER按钮仍然会导致屏幕打开。

防止设备休眠也很有用:

scrcpy --turn-screen-off --stay-awake
scrcpy -Sw

显示触摸

对于演示,显示物理接触(在物理设备上)可能很有用。

Android 在Developers options 中提供了此功能

Scrcpy提供了一个选项,可以在启动时启用此功能并在退出时恢复初始值:

scrcpy --show-touches
scrcpy -t

请注意,它仅显示物理触摸(手指在设备上)。

禁用屏幕保护程序

默认情况下,scrcpy 不会阻止屏幕保护程序在计算机上运行。

要禁用它:

scrcpy --disable-screensaver

输入控制

旋转设备屏幕

MOD+r在纵向和横向模式之间切换。

请注意,只有在前台应用程序支持请求的方向时,它才会旋转。

复制粘贴

每当 Android 剪贴板发生变化时,它都会自动同步到计算机剪贴板。

任何Ctrl快捷方式都会转发到设备。特别是:

  • Ctrl+c通常复制
  • Ctrl+x通常削减
  • Ctrl+v通常粘贴(在计算机到设备剪贴板同步之后)

这通常按您的预期工作。

但实际行为取决于活动应用程序。例如, Termux 会Ctrl+上发送 SIGINT c,而K-9 Mail 会 撰写一条新消息。

在这种情况下复制、剪切和粘贴(但仅在 Android >= 7 上支持):

  • MOD+c注射COPY
  • MOD+x注射CUT
  • MOD+v注入PASTE(在计算机到设备剪贴板同步之后)

此外,MODShift+v允许注入计算机剪贴板中的文本为重点的一系列事件。当组件不接受文本粘贴(例如在Termux 中)时,这很有用,但它可以破坏非 ASCII 内容。

警告:将计算机剪贴板粘贴到设备(通过 Ctrl+vMODv)会将内容复制到设备剪贴板中。因此,任何 Android 应用程序都可以读取其内容。您应该避免以这种方式粘贴敏感内容(如密码)。

以编程方式设置设备剪贴板时,某些设备的行为不符合预期。--legacy-paste提供了一个选项来更改Ctrl+vMOD+的行为,v以便它们也将计算机剪贴板文本作为关键事件序列(与MODShift+相同的方式v注入

双指缩放

模拟“双指缩放”:Ctrlclick-and-move

更准确地说,按住Ctrl左键单击按钮。在释放左键单击按钮之前,所有鼠标移动都会相对于屏幕中心缩放和旋转内容(如果应用程序支持)。

具体来说,scrcpy 在屏幕中心反转的位置从“虚拟手指”生成额外的触摸事件。

文本注入首选项

键入文本时会生成两种事件

  • 按键事件,表示按键被按下或释放;
  • 文本事件,表示已输入文本。

默认情况下,使用按键事件注入字母,以便键盘在游戏中按预期运行(通常用于 WASD 键)。

但这可能会导致问题如果遇到此类问题,可以通过以下方式避免:

scrcpy --prefer-text

(但这会破坏游戏中的键盘行为)

键重复

默认情况下,按住某个键会生成重复的键事件。这可能会在某些游戏中导致性能问题,而这些事件无论如何都是无用的。

为避免转发重复的关键事件:

scrcpy --no-key-repeat

右键单击和中键单击

默认情况下,右键单击触发 BACK(或开机),中键单击触发 HOME。要禁用这些快捷方式并将点击转发到设备,请执行以下操作:

scrcpy --forward-all-clicks

文件拖放

安装 APK

要安装 APK,请将 APK 文件(以 结尾.apk拖放scrcpy 窗口。

没有视觉反馈,日志打印到控制台。

推送文件到设备

要将文件推送到/sdcard/Download/设备上,请将(非 APK)文件拖放到scrcpy窗口。

没有视觉反馈,日志打印到控制台。

目标目录可以在启动时更改:

scrcpy --push-target=/sdcard/电影/

音频转发

scrcpy不转发音频使用sndcpy

另请参阅问题 #14

快捷方式

在下面的列表中,MOD是快捷方式修饰符。默认情况下,它是 (left)Alt或 (left) Super

可以使用 进行更改--shortcut-mod可能的键lctrlrctrl, laltraltlsuperrsuper例如:

#使用 RCtrl 作为快捷方式
scrcpy --shortcut-mod=rctrl

#使用 LCtrl+LAlt 或 LSuper 作为快捷方式
scrcpy --shortcut-mod=lctrl+lalt,lsuper

Super通常是WindowsCmd键。

行动捷径
切换全屏模式 MOD+f
向左旋转显示 MOD (左)
向右旋转显示 MOD (右)
将窗口大小调整为 1:1(像素完美) MOD+g
调整窗口大小以移除黑色边框 MODw双击左键¹
点击 HOME MODh中键单击
点击 BACK MODb右键单击²
点击 APP_SWITCH MODs第四次点击³
点击MENU(解锁屏幕) MOD+m
点击 VOLUME_UP MOD (向上)
点击 VOLUME_DOWN MOD (下)
点击 POWER MOD+p
打开 右键单击²
关闭设备屏幕(保持镜像) MOD+o
打开设备屏幕 MODShift+o
旋转设备屏幕 MOD+r
展开通知面板 MODn第 5 次点击³
展开设置面板 MODnn双击 5 次点击³
折叠面板 MODShift+n
复制到剪贴板⁴ MOD+c
剪切到剪贴板⁴ MOD+x
同步剪贴板和粘贴⁴ MOD+v
注入计算机剪贴板文本 MODShift+v
启用/禁用 FPS 计数器(在标准输出上) MOD+i
双指缩放 Ctrl+点击并移动

¹双击黑色边框将其删除。
²如果屏幕已关闭,则右键单击可打开屏幕,否则按 BACK。
³第 4 和第 5 个鼠标按钮(如果您的鼠标有这些按钮)。
⁴仅适用于 Android >= 7。

带有重复键的快捷方式通过松开并再次按下该键来执行。例如,要执行“扩展设置面板”:

  1. 按住MOD
  2. 然后双击n
  3. 最后,释放MOD

所有Ctrl+的快捷方式被转发到该设备,所以它们被激活的应用程序来处理。

自定义路径

要使用特定的adb二进制文件,请在环境变量中配置其路径 ADB

ADB=/path/to/adb scrcpy

要覆盖scrcpy-server文件的路径,请在 SCRCPY_SERVER_PATH.

推荐阅读