Skip to content

Commit

Permalink
docs: update posts
Browse files Browse the repository at this point in the history
  • Loading branch information
rockbenben committed Mar 13, 2024
1 parent eac0753 commit 7fc64f5
Showing 1 changed file with 57 additions and 59 deletions.
116 changes: 57 additions & 59 deletions docs/_posts/2019-08-26-scrcpy_screen_projection.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,26 @@ star: true
order: -26
---

[scrcpy](https://github.com/Genymobile/scrcpy) 是一款免费开源的投屏软件,支持在 Windows、macOS、和 GNU/Linux 上运行,不仅能够将安卓设备的屏幕实时显示在电脑上,还支持鼠标和键盘操作,甚至可以进行屏幕录制和摄像头使用。市面上主流的多屏协同软件大多都是基于 scrcpy 开发的套壳产品,而且 bug 也没有得到修复,因此建议直接使用官方的 scrcpy。
[scrcpy](https://github.com/Genymobile/scrcpy) 是一款开源免费的投屏软件,支持在 Windows、macOS、和 GNU/Linux 上运行,不仅能够将安卓设备的屏幕实时显示在电脑上,还支持鼠标和键盘操作,甚至可以进行屏幕录制和摄像头使用。市面上主流的多屏协同软件大多都是基于 scrcpy 开发的套壳产品,而且 bug 也没有得到修复,因此建议直接使用官方的 scrcpy。

本文将以 Windows 系统为例,介绍如何快速开始使用 scrcpy 进行有线和无线投屏。下载可以前往官方站点 [scrcpy-win64-v2.4.zip](https://github.com/Genymobile/scrcpy/releases/download/v2.4/scrcpy-win64-v2.4.zip),或者使用 [国内搬运链接](https://wwz.lanzouq.com/ivPYD1qcs29e)
本文将以 scrpy 在 Windows 上的应用为例,介绍如何实现无线投屏、视频录制、直播以及与电脑的互控

## 快速入门

### 准备工作

1. **下载 scrcpy** 访问 [scrcpy 发布页](https://github.com/Genymobile/scrcpy/releases) 下载最新版本的压缩包,然后解压
- **下载 scrcpy**访问 [scrcpy 发布页](https://github.com/Genymobile/scrcpy/releases) 下载最新版本的压缩包,或通过 [国内搬运链接](https://wwz.lanzouq.com/ivPYD1qcs29e) 获取,之后解压到任意位置

2. **开启手机的「开发者选项」和「USB 调试」** 通常在手机的「设置/系统」>「关于手机」中,连续点击版本号 7 次,然后返回,你会在设置菜单底部找到开发者选项,请在其中启用「USB 调试」。
- **开启手机的「开发者选项」和「USB 调试」**通常在手机的「设置/系统」>「关于手机」中,连续点击版本号 7 次,然后返回,你会在设置菜单底部找到开发者选项,请在其中启用「USB 调试」。

### 有线投屏

1. 使用 USB 数据线将手机连接至电脑,并在手机上允许 USB 调试
2. 打开解压后的 scrcpy 文件夹,双击 `scrcpy.exe` 启动投屏
1. **连接设备**:利用 USB 数据线,将手机与电脑连接。确保在手机上启用了 USB 调试选项
2. **启动 scrcpy**:定位到你已解压的 scrcpy 文件夹,并双击 `scrcpy.exe` 文件启动投屏应用

若需在手机黑屏时继续投屏,请按以下步骤操作:当手机屏幕亮起并解锁后,连接至电脑,然后输入命令 `.\scrcpy --turn-screen-off`。此操作会关闭手机屏幕,但投屏功能继续正常运行。
成功启动后,你的手机屏幕将实时映射到电脑屏幕上,允许你通过电脑的键盘和鼠标来控制手机。目前,scrcpy 已经支持英文及主流中文输入法。如果在文字输入时遇到问题,建议尝试复制和粘贴文本。

**附加操作**:如果你希望在手机屏幕关闭的情况下继续使用投屏功能请按以下步骤操作:当手机屏幕亮起并解锁后,连接至电脑,然后运行 `.\scrcpy --turn-screen-off` 命令。这样可以关闭手机屏幕而保持投屏活动。

### 无线投屏

Expand All @@ -44,6 +46,7 @@ cd D:\Libraries\Desktop\scrcpy-win64-v2.4
# 此外,一些手机需选择「文件传输」模式方能使用 adb。
# c.拔出手机数据线,开始无线投屏。(192.168.2.20 为手机端的 WIFI 局域网 ip,需更改)
# 当显示 `cannot connect` 的超时报错,则关闭设备的 WIFI 然后重新开启。
.\adb connect 192.168.2.20:5555
# d.启动 scrcpy.exe
Expand All @@ -56,7 +59,7 @@ cd D:\Libraries\Desktop\scrcpy-win64-v2.4
# 简化操作:合并步骤 c 和 d,保持屏幕常亮,指定 1024 分辨率。
.\scrcpy --tcpip=192.168.2.20 -w -m 1024

# 以H.265(质量更好)捕获屏幕,限制尺寸为1920,限制帧速率为60fps,禁用音频,并通过模拟物理键盘控制设备:
# 以 H.265(质量更好)捕获屏幕,限制尺寸为 1920,限制帧速率为 60f ps,禁用音频,并通过模拟物理键盘控制设备:
.\scrcpy --video-codec=h265 --max-size=1920 --max-fps=60 --no-audio --keyboard=uhid
```

Expand All @@ -66,7 +69,7 @@ cd D:\Libraries\Desktop\scrcpy-win64-v2.4

### 屏幕录制

如果想在投屏的同时,对手机屏幕进行录制,可以输入下方命令进行操作
使用 scrcpy,你可以在将手机屏幕投射到电脑的同时,录制手机屏幕上的活动,并将其保存为视频文件

```shell
# 将命令目录切换到 scrcpy 文件夹。
Expand All @@ -80,82 +83,77 @@ cd D:\Libraries\Desktop\scrcpy-win64-v2.4

### 手机当摄像头

Android 12 及以上版本支持使用 scrcpy 将手机摄像头投屏至电脑。更多设置方法参考 [scrcpy camera 文档](https://github.com/Genymobile/scrcpy/blob/master/doc/camera.md)
Android 12 及以上的用户可以借助 scrcpy 直接将手机的摄像头画面投射到电脑上,使手机成为一个便携的高质量摄像头,非常适合直播和远程会议

```shell
#列出可用的相机(及摄像头的有效尺寸和帧速率)
.\scrcpy --list-cameras
.\scrcpy --list-camera-sizes
- **检测可用摄像头**:列出所有可用的摄像头及支持的分辨率和帧率,以便选择最适合你需求的设置。

#捕获相机(默认为后置摄像头,同时捕获音频)。如需禁用音频,则添加 `--no-audio`
.\scrcpy --video-source=camera
```shell
.\scrcpy --list-cameras
.\scrcpy --list-camera-sizes
```

#默认情况下,相机以 Android 的默认帧速率 (30 fps) 进行拍摄
.\scrcpy --video-source=camera --camera-fps=60
- **捕获相机画面**`.\scrcpy --video-source=camera` 画面将使用后置摄像头,同时捕获音频。如需关闭音频,添加 `--no-audio` 参数。

#将设备摄像头以 1920x1080 的 H.265(和麦克风)录制到 MP4 文件
.\scrcpy --video-source=camera --video-codec=h265 --camera-size=1920x1080 --record=file.mp4
- **画面帧率**:默认情况下,相机以 Android 的默认帧速率 (30 fps) 进行拍摄。使用 `--camera-fps=60` 参数可将其调整为 60 帧。

#使用高速拍摄模式来形成视频,参数来自 `--list-camera-sizes`
.\scrcpy --video-source=camera --camera-size=1920x1080 --camera-fps=240
```
- **高速拍摄模式**:需先使用上方的 `--list-camera-sizes` 来获取摄像头的有效尺寸和帧速率。

## 常见问题
```shell
.\scrcpy --video-source=camera --camera-size=1920x1080 --camera-fps=240
```

### 错误检查
- **视频录制**:将设备摄像头以 1920x1080 的 H.265(和麦克风)录制到 MP4 文件

遇到错误时,请检查以下四种情况,这可以帮助解决大约 90% 的问题:
```shell
.\scrcpy --video-source=camera --video-codec=h265 --camera-size=1920x1080 --record=file.mp4
```

- 使用**原装数据线**替换当前数据线。
- 尝试更换 USB 端口,避免使用 USB 扩展端口,因为电力不足的 USB 端口可能会导致 `Device disconnected` 报错。
- 确认手机的**本机 IP** 设置是否正确。
- 仔细核对有线连接的步骤:先开启 USB 调试,然后连接手机与电脑,最后启动 scrcpy。
- **直播采集**:我经常用 scrcpy 将手机摄像头变为直播视频源。通常,我会设置摄像头的分辨率为 1920x1080,关闭音频功能,并通过 `--orientation` 参数来调整视频的方向。

### Could not find any ADB device
```shell
# 横屏模式
.\scrcpy --video-source=camera --camera-size=1920x1080 --no-audio

如果出现 `ERROR: Could not find any ADB device` 报错意味着你的手机未被电脑识别。可能是因为电脑上缺少相应的 USB 驱动程序。你可以点击此 [OEM 驱动程序链接](https://developer.android.com/studio/run/oem-usb?hl=zh-cn#Drivers) 进行下载。如果列表中没有你的手机品牌,请前往手机官网查找。例如,vivo 的驱动是 [vivo_usb_driver.exe](http://zs.vivo.com.cn/download.php?sel_type=2);小米则需要下载[小米解锁工具包](http://www.miui.com/unlock/download.html),里面包含官方驱动安装程序 MiUsbDriver.exe。
# 竖屏模式
.\scrcpy --video-source=camera --camera-size=1920x1080 --no-audio --orientation=90
```

### ERROR: Exception on thread
更多设置方法参考 [scrcpy camera 文档](https://github.com/Genymobile/scrcpy/blob/master/doc/camera.md)

报错 `ERROR: Exception on thread Thread[main,5,main]`,通常是因为手机不兼容 scrcpy 默认的分辨率设置。解决方法是,修改 scrcpy 启动代码,使用较低的分辨率。
## 常见问题

```shell
# 三个分辨率设置,任选其一。
.\scrcpy -m 1920
.\scrcpy -m 1024
.\scrcpy -m 800
```
在使用 scrcpy 时,大部分报错和问题都是因为连接出错而导致的。因此,如果你遇到任何困扰而又不确定问题所在,强烈建议你首先对下方的连接设置进行核对。

### 小米投屏设置
### 核对连接设置

小米手机的投屏设置与其他手机不同。你需要进入「我的设备」>「全部参数与信息」,然后连续点击多次「OS 版本」,随后返回到「设置」>「更多设置」,才能进入开发者模式
- **原装数据线**:若遇到连接问题,首先确保使用的是原装数据线。低质量的数据线可能导致连接不稳定

在开发者选项中,需要同时启用 `USB 调试``USB 调试 (安全设置)`,然后重新启动手机,才能使用 scrcpy 进行投屏。否则,scrcpy 将出现各种报错命令,并无法正常进行投屏操作
- **直连 USB 端口**:尝试更换电脑上的 USB 端口,优先直连电脑端口而非使用 USB 集线器,特别是遇到 `Device disconnected` 报错时

### 华为投屏断开
- **IP 地址核对**:确保手机的本机 IP 地址设置正确,并且手机与电脑位于同一 WiFi 网络下。

在华为/荣耀设备上,当切换到无线投屏时,拔掉数据线会导致系统关闭 USB 调试,从而终止投屏
- **USB 调试开启**:请检查手机的「开发者选项」中是否已启用「USB 调试」

解决方案来自 @残荷听雨:「进工程模式,把 usb 调成开发模式,先打开“在充电模式下允许 ADB 调试”,再打开 usb 调试。这样操作后,再拔掉数据线,它就不会自动关闭 usb 调试了。副作用是,“在充电模式下允许 ADB 调试”会自动常开,在网吧等公共区域,仅用数据线充电时就需要手动关掉 usb 调试,防止被黑。」
### 报错及其解决方法

### 投屏没声音
- **ADB 设备未找到**:如果出现 `ERROR: Could not find any ADB device` 报错,可能是因为缺少相应的 USB 驱动。请访问 [OEM 驱动程序链接](https://developer.android.com/studio/run/oem-usb?hl=zh-cn#Drivers) 下载适合你手机品牌的驱动程序。如果列表中没有你的手机品牌,请前往手机官网查找。例如,vivo 的驱动是 [vivo_usb_driver.exe](http://zs.vivo.com.cn/download.php?sel_type=2);小米则需要下载 [小米解锁工具包](http://www.miui.com/unlock/download.html),里面包含官方驱动安装程序 MiUsbDriver.exe。

Android 11 及以上版本支持将音频投屏至电脑。若你的系统版本已满足此要求,但仍未输出声音,建议更换音频解码方式尝试
- **无法连接**:若出现连接超时的问题,如 `cannot connect (10060)`,请检查设备的 IP 地址,确保手机和电脑处于同一网络。如果仍有问题,尝试重新启动手机的 WiFi 并再次尝试连接。或使用使用 `ping 192.168.2.204` 命令来检测连接是否正常。如果问题依旧存在,可以参考 [ADB: unable to connect](https://stackoverflow.com/questions/33462720/adb-unable-to-connect-to-192-168-1-105555) 进行更多调整

```shell
.\scrcpy --audio-codec=opus # default
.\scrcpy --audio-codec=aac
.\scrcpy --audio-codec=raw
```
- **异常报错**:报错 `ERROR: Exception on thread Thread[main,5,main]` 通常是因为手机不兼容 scrcpy 默认的分辨率设置。尝试使用不同的分辨率设置启动 scrcpy,例如 `.\scrcpy -m 1024`

### 音视频质量调整

- **无声音输出**:Android 11 及以上版本支持音频投屏。如果未输出声音,尝试更换音频解码方式,例如 `.\scrcpy --audio-codec=aac`

### 输入法问题
- **投屏模糊**:若投屏画质不清晰,可能是因为屏幕缩放设置。为解决此问题,请右键单击 scrcpy.exe,选择「属性」>「兼容性」>「更改高 DPI 设置」,并勾选「替代高 DPI 缩放行为」选项。应用此设置后,投屏效果即可恢复正常。

英文输入法及主流中文输入法均可正常使用。如中文输入出现问题,建议复制后再粘贴。
![](https://img.newzone.top/20190829095640.png "解决 scrcpy 投屏模糊")

### 投屏模糊
### 特定品牌注意事项

如果屏幕设置了缩放比例,可能导致投屏界面模糊。为解决此问题,请右键单击 scrcpy.exe,选择「属性」>「兼容性」>「更改高 DPI 设置」,并勾选「替代高 DPI 缩放行为」选项。应用此设置后,投屏效果即可恢复正常
- **小米手机**:小米手机用户可能需要进入「我的设备」>「全部参数与信息」,然后连续点击多次「OS 版本」,随后返回到「设置」>「更多设置」,才能进入开发者模式。在开发者选项中,需要同时启用 `USB 调试``USB 调试 (安全设置)`,然后重新启动手机,才能使用 scrcpy 进行投屏。否则,scrcpy 将出现各种报错命令,并无法正常进行投屏操作

![](https://img.newzone.top/20190829095640.png "解决 scrcpy 投屏模糊")
- **华为设备**:在华为/荣耀设备上,当切换到无线投屏时,拔掉数据线会导致系统关闭 USB 调试,从而终止投屏。解决方案来自 @残荷听雨:「进工程模式,把 usb 调成开发模式,先打开“在充电模式下允许 ADB 调试”,再打开 usb 调试。这样操作后,再拔掉数据线,它就不会自动关闭 usb 调试了。副作用是,“在充电模式下允许 ADB 调试”会自动常开,在网吧等公共区域,仅用数据线充电时就需要手动关掉 usb 调试,防止被黑。」

如遇其他问题或错误,请参考 [scrcpy 常见问题解答](https://github.com/Genymobile/scrcpy/blob/master/FAQ.md)
如果遇到的问题未在上述列表中或需要进一步的帮助,请参考 [scrcpy 官方 FAQ](https://github.com/Genymobile/scrcpy/blob/master/FAQ.md)

0 comments on commit 7fc64f5

Please sign in to comment.