Andorid の画面をPC に転送して操作も出来るScrcpy 2.0 でオーディオ転送にも対応

Andorid の画面をPC に転送して操作も出来るScrcpy というソフトウェアがあります．最新版の2.0でオーディオ転送にも正式対応したので試してみました．

Genymobile/scrcpy: Display and control your Android device

Scrcpy はここでも何度か記事にしています．

scrcpy – matoken’s meme

PCでAndroid端末の画面転送と操作が出来るscrcpy – matoken’s meme

scrcpyを使ってAndroidスマートフォンの動画をPCで視聴する – matoken’s meme

snap版scrcpyでAndroidデバイス画面をビデオデバイスに出力 – matoken’s meme

このScrcpy はオーディオに対応しておらず，sndcpy という別のソフトウェアを使ったり，Scrcpy/sndcpyを同梱してQtでGUIを実装したQtScrcpy を使ったり，Bluetooth a2d-source を使って音を転送していました．

rom1v/sndcpy: Android audio forwarding (scrcpy, but for audio)

sndcpyでAndroidのサウンドをUSB経由でPCに転送 – matoken’s meme

barry-ran/QtScrcpy: Android real-time display control software

Scrcpy 2.0 がリリースされ，標準でオーディオに対応したとのことで試してみました．

Scrcpy 2.0, with audio · ~rom1v/blog

Linux 環境への導入は以下のページに纏まっています．ただ，現バージョンで2.0に対応しているのはHomebrewとScoopだけのようです．

scrcpy/linux.md at master · Genymobile/scrcpy

snap も未だ 1.25 です．

Install scrcpy on Linux | Snap Store

ということでsourceからbuildしました．

$ sudo apt install ffmpeg libsdl2-2.0-0 adb wget \
gcc git pkg-config meson ninja-build libsdl2-dev \
libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev \
libswresample-dev libusb-1.0-0 libusb-1.0-0-dev (1)
$ git clone https://github.com/Genymobile/scrcpy (2)
$ cd scrcpy
$ ./install_release.sh (3)
$ which scrcpy (4)
/usr/local/bin/scrcpy
$ scrcpy --version (5)
scrcpy 2.0 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
- SDL: 2.26.3 / 2.26.3
- libavcodec: 59.37.100 / 59.37.100
- libavformat: 59.27.100 / 59.27.100
- libavutil: 57.28.100 / 57.28.100
- libavdevice: 59.7.100 / 59.7.100
- libusb: - / 1.0.26

関連パッケージの導入

scrcpy のclone

build&install script の実行

インストールパスの確認

バージョンの確認

Note

uninstall

$ sudo ninja -Cbuild-auto uninstall

Android 端末のudev への登録をしていない場合登録します．Android端末側ではUSBデバッグを有効にしておいて，フィンガープリントの確認が表示されたら許可します．

$ lsusb | grep -i moto (1)
Bus 001 Device 011: ID 22b8:2e82 Motorola PCS XT1541 [Moto G 3rd Gen]
$ echo '# moto g31
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8" ATTR{idProduct}=="2e82", MODE="0660", GROUP="plugdev", SYMLINK+="android%n"' | sudo tee -a /etc/udev/rules.d/51-android.rules (2)
$ sudo udevadm control --reload (3)
$ adb devices (4)
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
ZY22DZ5M6C device (5)

AndroidデバイスのVID/PIDを確認

udevへ登録

udevをリロードして反映

adbコマンドでデバイスが認識されるか確認

この状態でScrcpyを実行します．オーディオについては既定値で有効になっています．

$ scrcpy
scrcpy 2.0 <https://github.com/Genymobile/scrcpy>
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 5.2 MB/s (52867 bytes in 0.010s)
[server] INFO: Device: motorola moto g31(w) (Android 12)
INFO: Renderer: opengl
INFO: OpenGL version: 4.6 (Compatibility Profile) Mesa 22.3.3
INFO: Trilinear filtering enabled
INFO: Initial texture: 1080x2400

この状態でAndroid側で音の出るアプリケーションを試すとPCから音が出てAndroid側からは音が出ずいい感じです．Bluetooth 接続と違い遅延も感じません．

Pavucontrol を確認しても scrcpy が居ます．

Scrcpy オーディオ非対応のAndroid 9(10 以前)端末でも試してみたところ以下のような警告が表示され，音は転送されませんでした．

[server] INFO: Device: TINNO C330 (Android 9)
[server] WARN: Audio disabled: it is not supported before Android 11

オーディオ転送を行いたくない場合は --no-audio オプションが利用できます．
以下オーディオ関連のオプションです．音がきれいに聞こえない場合は --audio-buffer=ms を設定する(既定値50から増やす)と良さそうです

scrcpy --help | grep -- -audio
--audio-bit-rate=value
--audio-buffer=ms
--audio-codec=name
--audio-codec-options=key[:type]=value[,...]
--audio-encoder=name
by --audio-codec).
--no-audio
--require-audio

環境

$ scrcpy --version
scrcpy 2.0 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
- SDL: 2.26.3 / 2.26.3
- libavcodec: 59.37.100 / 59.37.100
- libavformat: 59.27.100 / 59.27.100
- libavutil: 57.28.100 / 57.28.100
- libavdevice: 59.7.100 / 59.7.100
- libusb: - / 1.0.26
$ dpkg-query -W ffmpeg libsdl2-2.0-0 adb wget gcc git pkg-config meson ninja-build libsdl2-dev libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev libswresample-dev libusb-1.0-0 libusb-1.0-0-dev adb
adb 1:29.0.6-26
ffmpeg 7:5.1.2-3
gcc 4:12.2.0-3
git 1:2.39.2-1.1
libavcodec-dev:amd64 7:5.1.2-3
libavdevice-dev:amd64 7:5.1.2-3
libavformat-dev:amd64 7:5.1.2-3
libavutil-dev:amd64 7:5.1.2-3
libsdl2-2.0-0:amd64 2.26.3+dfsg-1
libsdl2-2.0-0:i386 2.26.3+dfsg-1
libsdl2-dev:amd64 2.26.3+dfsg-1
libswresample-dev:amd64 7:5.1.2-3
libusb-1.0-0:amd64 2:1.0.26-1
libusb-1.0-0:i386 2:1.0.26-1
libusb-1.0-0-dev:amd64 2:1.0.26-1
meson 1.0.0-1.1
ninja-build 1.11.1-1
pkg-config:amd64 1.8.1-1
wget 1.21.3-1+b2
$ lsb_release -a
Distributor ID: Debian
Description: Debian GNU/Linux bookworm/sid
Release: n/a