跳到主要内容

scrcpy

scrcpy

This application provides display and control of Android devices connected on USB (or over TCP/IP). It does not require any root access. It works on GNU/Linux, Windows and macOS.

SCRCPY: An Android Screen Mirroring Tool

Run

Plug an Android device, and execute:

scrcpy

It accepts command-line arguments, listed by:

scrcpy --help

Features

Capture configuration

Reduce size

Sometimes, it is useful to mirror an Android device at a lower definition to increase performance.

To limit both the width and height to some value (e.g. 1024):

scrcpy --max-size 1024
scrcpy -m 1024 # short version

The other dimension is computed to that the device aspect ratio is preserved. That way, a device in 1920×1080 will be mirrored at 1024×576.

Change bit-rate

The default bit-rate is 8 Mbps. To change the video bitrate (e.g. to 2 Mbps):

scrcpy --bit-rate 2M
scrcpy -b 2M # short version

Limit frame rate

The capture frame rate can be limited:

scrcpy --max-fps 15

This is officially supported since Android 10, but may work on earlier versions.

Crop

The device screen may be cropped to mirror only part of the screen.

This is useful for example to mirror only one eye of the Oculus Go:

scrcpy --crop 1224:1440:0:0   # 1224x1440 at offset (0,0)

If --max-size is also specified, resizing is applied after cropping.

Lock video orientation

To lock the orientation of the mirroring:

scrcpy --lock-video-orientation 0   # natural orientation
scrcpy --lock-video-orientation 1 # 90° counterclockwise
scrcpy --lock-video-orientation 2 # 180°
scrcpy --lock-video-orientation 3 # 90° clockwise

This affects recording orientation.

Recording

It is possible to record the screen while mirroring:

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

To disable mirroring while recording:

scrcpy --no-display --record file.mp4
scrcpy -Nr file.mkv
# interrupt recording with Ctrl+C

"Skipped frames" are recorded, even if they are not displayed in real time (for performance reasons). Frames are timestamped on the device, so packet delay variation does not impact the recorded file.

Connection

Wireless

Scrcpy uses adb to communicate with the device, and adb can connect to a device over TCP/IP:

  1. Connect the device to the same Wi-Fi as your computer.
  2. Get your device IP address (in Settings → About phone → Status).
  3. Enable adb over TCP/IP on your device: adb tcpip 5555.
  4. Unplug your device.
  5. Connect to your device: adb connect DEVICE_IP:5555 (replace DEVICE_IP).
  6. Run scrcpy as usual.

It may be useful to decrease the bit-rate and the definition:

scrcpy --bit-rate 2M --max-size 800
scrcpy -b2M -m800 # short version

Multi-devices

If several devices are listed in adb devices, you must specify the serial:

scrcpy --serial 0123456789abcdef
scrcpy -s 0123456789abcdef # short version

If the device is connected over TCP/IP:

scrcpy --serial 192.168.0.1:5555
scrcpy -s 192.168.0.1:5555 # short version

You can start several instances of scrcpy for several devices.

Autostart on device connection

You could use AutoAdb:

autoadb scrcpy -s '{}'

SSH tunnel

To connect to a remote device, it is possible to connect a local adb client to a remote adb server (provided they use the same version of the adb protocol):

adb kill-server    # kill the local adb server on 5037
ssh -CN -L5037:localhost:5037 -R27183:localhost:27183 your_remote_computer
# keep this open

From another terminal:

scrcpy

To avoid enabling remote port forwarding, you could force a forward connection instead (notice the -L instead of -R):

adb kill-server    # kill the local adb server on 5037
ssh -CN -L5037:localhost:5037 -L27183:localhost:27183 your_remote_computer
# keep this open

From another terminal:

scrcpy --force-adb-forward

Like for wireless connections, it may be useful to reduce quality:

scrcpy -b2M -m800 --max-fps 15