From 57fb08e443272a9d346b036fb421cdf0ccff3074 Mon Sep 17 00:00:00 2001 From: LuXu Date: Mon, 15 Nov 2021 17:20:57 +0800 Subject: [PATCH] Update Simplified Chinese README to 1.20 PR #2786 Signed-off-by: Romain Vimont --- README.md | 2 +- README.zh-Hans.md | 313 +++++++++++++++++++++++++++++++++------------- 2 files changed, 224 insertions(+), 91 deletions(-) diff --git a/README.md b/README.md index c9080861..8d80cb1f 100644 --- a/README.md +++ b/README.md @@ -955,7 +955,7 @@ This README is available in other languages: - [한국어 (Korean, `ko`) - v1.11](README.ko.md) - [Português Brasileiro (Brazilian Portuguese, `pt-BR`) - v1.19](README.pt-br.md) - [Español (Spanish, `sp`) - v1.17](README.sp.md) -- [简体中文 (Simplified Chinese, `zh-Hans`) - v1.17](README.zh-Hans.md) +- [简体中文 (Simplified Chinese, `zh-Hans`) - v1.20](README.zh-Hans.md) - [繁體中文 (Traditional Chinese, `zh-Hant`) - v1.15](README.zh-Hant.md) - [Turkish (Turkish, `tr`) - v1.18](README.tr.md) diff --git a/README.zh-Hans.md b/README.zh-Hans.md index bdd8023c..b96d6d5a 100644 --- a/README.zh-Hans.md +++ b/README.zh-Hans.md @@ -2,27 +2,41 @@ _Only the original [README](README.md) is guaranteed to be up-to-date._ 只有原版的[README](README.md)会保持最新。 -本文根据[ed130e05]进行翻译。 +Current version is based on [65b023a] -[ed130e05]: https://github.com/Genymobile/scrcpy/blob/ed130e05d55615d6014d93f15cfcb92ad62b01d8/README.md +本文根据[65b023a]进行翻译。 -# scrcpy (v1.17) +[65b023a]: https://github.com/Genymobile/scrcpy/blob/65b023ac6d586593193fd5290f65e25603b68e02/README.md + +# scrcpy (v1.20) + +scrcpy 本应用程序可以显示并控制通过 USB (或 [TCP/IP][article-tcpip]) 连接的安卓设备,且不需要任何 _root_ 权限。本程序支持 _GNU/Linux_, _Windows_ 和 _macOS_。 ![screenshot](assets/screenshot-debian-600.jpg) -它专注于: +本应用专注于: - - **轻量** (原生,仅显示设备屏幕) - - **性能** (30~60fps) - - **质量** (分辨率可达 1920×1080 或更高) - - **低延迟** ([35~70ms][lowlatency]) - - **快速启动** (最快 1 秒内即可显示第一帧) - - **无侵入性** (不会在设备上遗留任何程序) + - **轻量**: 原生,仅显示设备屏幕 + - **性能**: 30~120fps,取决于设备 + - **质量**: 分辨率可达 1920×1080 或更高 + - **低延迟**: [35~70ms][lowlatency] + - **快速启动**: 最快 1 秒内即可显示第一帧 + - **无侵入性**: 不会在设备上遗留任何程序 + - **用户利益**: 无需帐号,无广告,无需联网 + - **自由**: 自由和开源软件 [lowlatency]: https://github.com/Genymobile/scrcpy/pull/646 +功能: + - [屏幕录制](#屏幕录制) + - 镜像时[关闭设备屏幕](#关闭设备屏幕) + - 双向[复制粘贴](#复制粘贴) + - [可配置显示质量](#采集设置) + - 以设备屏幕[作为摄像头(V4L2)](#v4l2loopback) (仅限 Linux) + - [模拟物理键盘 (HID)](#物理键盘模拟-hid) (仅限 Linux) + - 更多 …… ## 系统要求 @@ -41,6 +55,17 @@ _Only the original [README](README.md) is guaranteed to be up-to-date._ Packaging status +### 概要 + + - Linux: `apt install scrcpy` + - Windows: [下载][direct-win64] + - macOS: `brew install scrcpy` + +从源代码编译: [构建][BUILD] ([简化过程][BUILD_simple]) + +[BUILD]: BUILD.md +[BUILD_simple]: BUILD.md#simple + ### Linux 在 Debian (目前仅支持 _testing_ 和 _sid_ 分支) 和Ubuntu (20.04) 上: @@ -70,13 +95,12 @@ apt install scrcpy [Ebuild]: https://wiki.gentoo.org/wiki/Ebuild [ebuild-link]: https://github.com/maggu2810/maggu2810-overlay/tree/master/app-mobilephone/scrcpy -您也可以[自行构建][BUILD] (不必担心,这并不困难)。 - +您也可以[自行构建][BUILD] ([简化过程][BUILD_simple])。 ### Windows -在 Windows 上,简便起见,我们提供包含了所有依赖 (包括 `adb`) 的预编译包。 +在 Windows 上,为简便起见,我们提供包含了所有依赖 (包括 `adb`) 的预编译包。 - [README](README.md#windows) @@ -114,13 +138,17 @@ brew install scrcpy 你还需要在 `PATH` 内有 `adb`。如果还没有: ```bash -# Homebrew >= 2.6.0 -brew install --cask android-platform-tools - -# Homebrew < 2.6.0 -brew cask install android-platform-tools +brew install android-platform-tools ``` +或者通过 [MacPorts],该方法同时设置好 adb: + +```bash +sudo port install scrcpy +``` + +[MacPorts]: https://www.macports.org/ + 您也可以[自行构建][BUILD]。 @@ -140,7 +168,7 @@ scrcpy --help ## 功能介绍 -### 捕获设置 +### 采集设置 #### 降低分辨率 @@ -158,7 +186,7 @@ scrcpy -m 1024 # 简写 #### 修改码率 -默认码率是 8Mbps。要改变视频的码率 (例如改为 2Mbps): +默认码率是 8 Mbps。改变视频码率 (例如改为 2 Mbps): ```bash scrcpy --bit-rate 2M @@ -167,7 +195,7 @@ scrcpy -b 2M # 简写 #### 限制帧率 -要限制捕获的帧率: +要限制采集的帧率: ```bash scrcpy --max-fps 15 @@ -194,10 +222,11 @@ scrcpy --crop 1224:1440:0:0 # 以 (0,0) 为原点的 1224x1440 像素 要锁定镜像画面的方向: ```bash -scrcpy --lock-video-orientation 0 # 自然方向 -scrcpy --lock-video-orientation 1 # 逆时针旋转 90° -scrcpy --lock-video-orientation 2 # 180° -scrcpy --lock-video-orientation 3 # 顺时针旋转 90° +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° ``` 只影响录制的方向。 @@ -219,7 +248,9 @@ scrcpy --encoder OMX.qcom.video.encoder.avc scrcpy --encoder _ ``` -### 屏幕录制 +### 采集 + +#### 屏幕录制 可以在镜像的同时录制视频: @@ -241,6 +272,75 @@ scrcpy -Nr file.mkv [packet delay variation]: https://en.wikipedia.org/wiki/Packet_delay_variation +#### v4l2loopback + +在 Linux 上,可以将视频流发送至 v4l2 回环 (loopback) 设备,因此可以使用任何 v4l2 工具像摄像头一样打开安卓设备。 + +需安装 `v4l2loopback` 模块: + +```bash +sudo apt install v4l2loopback-dkms +``` + +创建一个 v4l2 设备: + +```bash +sudo modprobe v4l2loopback +``` + +这样会在 `/dev/videoN` 创建一个新的视频设备,其中 `N` 是整数。 ([更多选项](https://github.com/umlaeute/v4l2loopback#options) 可以用来创建多个设备或者特定 ID 的设备)。 + +列出已启用的设备: + +```bash +# 需要 v4l-utils 包 +v4l2-ctl --list-devices + +# 简单但或许足够 +ls /dev/video* +``` + +使用一个 v4l2 漏开启 scrcpy: + +```bash +scrcpy --v4l2-sink=/dev/videoN +scrcpy --v4l2-sink=/dev/videoN --no-display # 禁用窗口镜像 +scrcpy --v4l2-sink=/dev/videoN -N # 简写 +``` + +(将 `N` 替换为设备 ID,使用 `ls /dev/video*` 命令查看) + +启用之后,可以使用 v4l2 工具打开视频流: + +```bash +ffplay -i /dev/videoN +vlc v4l2:///dev/videoN # VLC 可能存在一些缓冲延迟 +``` + +例如,可以在 [OBS] 中采集视频。 + +[OBS]: https://obsproject.com/ + + +#### 缓冲 + +可以加入缓冲,会增加延迟,但可以减少抖动 (见 [#2464])。 + +[#2464]: https://github.com/Genymobile/scrcpy/issues/2464 + +对于显示缓冲: + +```bash +scrcpy --display-buffer=50 # 为显示增加 50 毫秒的缓冲 +``` + +对于 V4L2 漏: + +```bash +scrcpy --v4l2-buffer=500 # 为 v4l2 漏增加 500 毫秒的缓冲 +``` + + ### 连接 #### 无线 @@ -249,16 +349,17 @@ _Scrcpy_ 使用 `adb` 与设备通信,并且 `adb` 支持通过 TCP/IP [连接 1. 将设备和电脑连接至同一 Wi-Fi。 2. 打开 设置 → 关于手机 → 状态信息,获取设备的 IP 地址,也可以执行以下的命令: + ```bash adb shell ip route | awk '{print $9}' ``` -3. 启用设备的网络 adb 功能 `adb tcpip 5555`。 +3. 启用设备的网络 adb 功能: `adb tcpip 5555`。 4. 断开设备的 USB 连接。 -5. 连接到您的设备:`adb connect DEVICE_IP:5555` _(将 `DEVICE_IP` 替换为设备 IP)_. +5. 连接到您的设备:`adb connect DEVICE_IP:5555` _(将 `DEVICE_IP` 替换为设备 IP)_。 6. 正常运行 `scrcpy`。 -可能需要降低码率和分辨率: +可能降低码率和分辨率会更好一些: ```bash scrcpy --bit-rate 2M --max-size 800 @@ -327,7 +428,7 @@ scrcpy --force-adb-forward ``` -类似无线网络连接,可能需要降低画面质量: +类似地,对于无线连接,可能需要降低画面质量: ``` scrcpy -b2M -m800 --max-fps 15 @@ -353,7 +454,7 @@ scrcpy --window-x 100 --window-y 100 --window-width 800 --window-height 600 #### 无边框 -关闭边框: +禁用窗口边框: ```bash scrcpy --window-borderless @@ -369,7 +470,7 @@ scrcpy --always-on-top #### 全屏 -您可以通过如下命令直接全屏启动scrcpy: +您可以通过如下命令直接全屏启动 scrcpy: ```bash scrcpy --fullscreen @@ -394,7 +495,7 @@ scrcpy --rotation 1 也可以使用 MOD+ _(左箭头)_ 和 MOD+ _(右箭头)_ 随时更改。 -需要注意的是, _scrcpy_ 有三个不同的方向: +需要注意的是, _scrcpy_ 中有三类旋转方向: - MOD+r 请求设备在竖屏和横屏之间切换 (如果前台应用程序不支持请求的朝向,可能会拒绝该请求)。 - [`--lock-video-orientation`](#锁定屏幕方向) 改变镜像的朝向 (设备传输到电脑的画面的朝向)。这会影响录制。 - `--rotation` (或 MOD+/MOD+) 只旋转窗口的内容。这只影响显示,不影响录制。 @@ -404,7 +505,7 @@ scrcpy --rotation 1 #### 只读 -禁用电脑对设备的控制 (如键盘输入、鼠标事件和文件拖放): +禁用电脑对设备的控制 (任何可与设备交互的方式:如键盘输入、鼠标事件和文件拖放): ```bash scrcpy --no-control @@ -430,14 +531,14 @@ adb shell dumpsys display # 在输出中搜索 “mDisplayId=” #### 保持常亮 -阻止设备在连接时休眠: +阻止设备在连接时一段时间后休眠: ```bash scrcpy --stay-awake scrcpy -w ``` -程序关闭时会恢复设备原来的设置。 +scrcpy 关闭时会恢复设备原来的设置。 #### 关闭设备屏幕 @@ -451,7 +552,7 @@ scrcpy -S 或者在任何时候按 MOD+o。 -要重新打开屏幕,按下 MOD+Shift+o. +要重新打开屏幕,按下 MOD+Shift+o。 在Android上,`电源` 按钮始终能把屏幕打开。为了方便,对于在 _scrcpy_ 中发出的 `电源` 事件 (通过鼠标右键或 MOD+p),会 (尽最大的努力) 在短暂的延迟后将屏幕关闭。设备上的 `电源` 按钮仍然能打开设备屏幕。 @@ -462,20 +563,17 @@ scrcpy --turn-screen-off --stay-awake scrcpy -Sw ``` +#### 退出时息屏 -#### 渲染过期帧 - -默认状态下,为了降低延迟, _scrcpy_ 永远渲染解码成功的最近一帧,并跳过前面任意帧。 - -强制渲染所有帧 (可能导致延迟变高): +scrcpy 退出时关闭设备屏幕: ```bash -scrcpy --render-expired-frames +scrcpy --power-off-on-close ``` #### 显示触摸 -在演示时,可能会需要显示物理触摸点 (在物理设备上的触摸点)。 +在演示时,可能会需要显示 (在物理设备上的) 物理触摸点。 Android 在 _开发者选项_ 中提供了这项功能。 @@ -538,10 +636,32 @@ scrcpy --disable-screensaver 更准确的说,在按住鼠标左键时按住 Ctrl。直到松开鼠标左键,所有鼠标移动将以屏幕中心为原点,缩放或旋转内容 (如果应用支持)。 -实际上,_scrcpy_ 会在以屏幕中心对称的位置上生成由“虚拟手指”发出的额外触摸事件。 +实际上,_scrcpy_ 会在关于屏幕中心对称的位置上用“虚拟手指”发出触摸事件。 +#### 物理键盘模拟 (HID) -#### 文字注入偏好 +默认情况下,scrcpy 使用安卓按键或文本注入,这在任何情况都可以使用,但仅限于ASCII字符。 + +在 Linux 上,scrcpy 可以模拟为 Android 上的物理 USB 键盘,以提供更好地输入体验 (使用 [USB HID over AOAv2][hid-aoav2]):禁用虚拟键盘,并适用于任何字符和输入法。 + +[hid-aoav2]: https://source.android.com/devices/accessories/aoa2#hid-support + +不过,这种方法仅支持 USB 连接以及 Linux平台。 + +启用 HID 模式: + +```bash +scrcpy --hid-keyboard +scrcpy -K # 简写 +``` + +如果失败了 (如设备未通过 USB 连接),则自动回退至默认模式 (终端中会输出日志)。这即允许通过 USB 和 TCP/IP 连接时使用相同的命令行参数。 + +在这种模式下,原始按键事件 (扫描码) 被发送给设备,而与宿主机按键映射无关。因此,若键盘布局不匹配,需要在 Android 设备上进行配置,具体为 设置 → 系统 → 语言和输入法 → [实体键盘]。 + +[Physical keyboard]: https://github.com/Genymobile/scrcpy/pull/2632#issuecomment-923756915 + +#### 文本注入偏好 打字的时候,系统会产生两种[事件][textevents]: - _按键事件_ ,代表一个按键被按下或松开。 @@ -557,13 +677,15 @@ scrcpy --prefer-text (这会导致键盘在游戏中工作不正常) +该选项不影响 HID 键盘 (该模式下,所有按键都发送为扫描码)。 + [textevents]: https://blog.rom1v.com/2018/03/introducing-scrcpy/#handle-text-input [prefertext]: https://github.com/Genymobile/scrcpy/issues/650#issuecomment-512945343 #### 按键重复 -默认状态下,按住一个按键不放会生成多个重复按键事件。在某些游戏中这可能会导致性能问题。 +默认状态下,按住一个按键不放会生成多个重复按键事件。在某些游戏中这通常没有实际用途,且可能会导致性能问题。 避免转发重复按键事件: @@ -571,10 +693,11 @@ scrcpy --prefer-text scrcpy --no-key-repeat ``` +该选项不影响 HID 键盘 (该模式下,按键重复由 Android 直接管理)。 #### 右键和中键 -默认状态下,右键会触发返回键 (或电源键),中键会触发 HOME 键。要禁用这些快捷键并把所有点击转发到设备: +默认状态下,右键会触发返回键 (或电源键开启),中键会触发 HOME 键。要禁用这些快捷键并把所有点击转发到设备: ```bash scrcpy --forward-all-clicks @@ -587,27 +710,27 @@ scrcpy --forward-all-clicks 将 APK 文件 (文件名以 `.apk` 结尾) 拖放到 _scrcpy_ 窗口来安装。 -该操作在屏幕上不会出现任何变化,而会在控制台输出一条日志。 +不会有视觉反馈,终端会输出一条日志。 #### 将文件推送至设备 -要推送文件到设备的 `/sdcard/`,将 (非 APK) 文件拖放至 _scrcpy_ 窗口。 +要推送文件到设备的 `/sdcard/Download/`,将 (非 APK) 文件拖放至 _scrcpy_ 窗口。 -该操作没有可见的响应,只会在控制台输出日志。 +不会有视觉反馈,终端会输出一条日志。 在启动时可以修改目标目录: ```bash -scrcpy --push-target /sdcard/foo/bar/ +scrcpy --push-target=/sdcard/Movies/ ``` ### 音频转发 -_Scrcpy_ 不支持音频。请使用 [sndcpy]. +_Scrcpy_ 不支持音频。请使用 [sndcpy]。 -另外请阅读 [issue #14]。 +另见 [issue #14]。 [sndcpy]: https://github.com/rom1v/sndcpy [issue #14]: https://github.com/Genymobile/scrcpy/issues/14 @@ -632,36 +755,46 @@ _[Super] 键通常是指 WindowsCmd 键。 [Super]: https://en.wikipedia.org/wiki/Super_key_(keyboard_button) - | 操作 | 快捷键 | - | --------------------------------- | :------------------------------------------- | - | 全屏 | MOD+f | - | 向左旋转屏幕 | MOD+ _(左箭头)_ | - | 向右旋转屏幕 | MOD+ _(右箭头)_ | - | 将窗口大小重置为1:1 (匹配像素) | MOD+g | - | 将窗口大小重置为消除黑边 | MOD+w \| _双击¹_ | - | 点按 `主屏幕` | MOD+h \| _鼠标中键_ | - | 点按 `返回` | MOD+b \| _鼠标右键²_ | - | 点按 `切换应用` | MOD+s | - | 点按 `菜单` (解锁屏幕) | MOD+m | - | 点按 `音量+` | MOD+ _(上箭头)_ | - | 点按 `音量-` | MOD+ _(下箭头)_ | - | 点按 `电源` | MOD+p | - | 打开屏幕 | _鼠标右键²_ | - | 关闭设备屏幕 (但继续在电脑上显示) | MOD+o | - | 打开设备屏幕 | MOD+Shift+o | - | 旋转设备屏幕 | MOD+r | - | 展开通知面板 | MOD+n | - | 收起通知面板 | MOD+Shift+n | - | 复制到剪贴板³ | MOD+c | - | 剪切到剪贴板³ | MOD+x | - | 同步剪贴板并粘贴³ | MOD+v | - | 注入电脑剪贴板文本 | MOD+Shift+v | - | 打开/关闭FPS显示 (在 stdout) | MOD+i | - | 捏拉缩放 | Ctrl+_按住并移动鼠标_ | + | 操作 | 快捷键 + | --------------------------------- | :------------------------------------------- + | 全屏 | MOD+f + | 向左旋转屏幕 | MOD+ _(左箭头)_ + | 向右旋转屏幕 | MOD+ _(右箭头)_ + | 将窗口大小重置为1:1 (匹配像素) | MOD+g + | 将窗口大小重置为消除黑边 | MOD+w \| _双击左键¹_ + | 点按 `主屏幕` | MOD+h \| _中键_ + | 点按 `返回` | MOD+b \| _右键²_ + | 点按 `切换应用` | MOD+s \| _第4键³_ + | 点按 `菜单` (解锁屏幕) | MOD+m + | 点按 `音量+` | MOD+ _(上箭头)_ + | 点按 `音量-` | MOD+ _(下箭头)_ + | 点按 `电源` | MOD+p + | 打开屏幕 | _鼠标右键²_ + | 关闭设备屏幕 (但继续在电脑上显示) | MOD+o + | 打开设备屏幕 | MOD+Shift+o + | 旋转设备屏幕 | MOD+r + | 展开通知面板 | MOD+n \| _第5键³_ + | 展开设置面板 | MOD+n+n \| _双击第5键³_ + | 收起通知面板 | MOD+Shift+n + | 复制到剪贴板⁴ | MOD+c + | 剪切到剪贴板⁴ | MOD+x + | 同步剪贴板并粘贴⁴ | MOD+v + | 注入电脑剪贴板文本 | MOD+Shift+v + | 打开/关闭FPS显示 (至标准输出) | MOD+i + | 捏拉缩放 | Ctrl+_按住并移动鼠标_ + | 拖放 APK 文件 | 从电脑安装 APK 文件 + | 拖放非 APK 文件 | [将文件推送至设备](#push-file-to-device) -_¹双击黑边可以去除黑边_ -_²点击鼠标右键将在屏幕熄灭时点亮屏幕,其余情况则视为按下返回键 。_ -_³需要安卓版本 Android >= 7。_ +_¹双击黑边可以去除黑边。_ +_²点击鼠标右键将在屏幕熄灭时点亮屏幕,其余情况则视为按下返回键 。_ +_³鼠标的第4键和第5键。_ +_⁴需要安卓版本 Android >= 7。_ + +有重复按键的快捷键通过松开再按下一个按键来进行,如“展开设置面板”: + + 1. 按下 MOD 不放。 + 2. 双击 n。 + 3. 松开 MOD。 所有的 Ctrl+_按键_ 的快捷键都会被转发到设备,所以会由当前应用程序进行处理。 @@ -670,18 +803,20 @@ _³需要安卓版本 Android >= 7。_ 要使用指定的 _adb_ 二进制文件,可以设置环境变量 `ADB`: - ADB=/path/to/adb scrcpy +```bash +ADB=/path/to/adb scrcpy +``` 要覆盖 `scrcpy-server` 的路径,可以设置 `SCRCPY_SERVER_PATH`。 -[useful]: https://github.com/Genymobile/scrcpy/issues/278#issuecomment-429330345 +要覆盖图标,可以设置其路径至 `SCRCPY_ICON_PATH`。 ## 为什么叫 _scrcpy_ ? 一个同事让我找出一个和 [gnirehtet] 一样难以发音的名字。 -[`strcpy`] 复制一个 **str**ing; `scrcpy` 复制一个 **scr**een。 +[`strcpy`] 复制一个 **str**ing (字符串); `scrcpy` 复制一个 **scr**een (屏幕)。 [gnirehtet]: https://github.com/Genymobile/gnirehtet [`strcpy`]: http://man7.org/linux/man-pages/man3/strcpy.3.html @@ -689,14 +824,12 @@ _³需要安卓版本 Android >= 7。_ ## 如何构建? -请查看[BUILD]。 - -[BUILD]: BUILD.md +请查看 [BUILD]。 ## 常见问题 -请查看[FAQ](FAQ.md)。 +请查看 [FAQ](FAQ.md)。 ## 开发者