Andorid の画面をPC に転送して操作も出来るScrcpy というソフトウェアがあります.最新版の2.0でオーディオ転送にも正式対応したので試してみました.
Scrcpy はここでも何度か記事にしています.
このScrcpy はオーディオに対応しておらず,sndcpy という別のソフトウェアを使ったり,Scrcpy/sndcpyを同梱してQtでGUIを実装したQtScrcpy を使ったり,Bluetooth a2d-source を使って音を転送していました.
Scrcpy 2.0 がリリースされ,標準でオーディオに対応したとのことで試してみました.
Linux 環境への導入は以下のページに纏まっています.ただ,現バージョンで2.0に対応しているのはHomebrewとScoopだけのようです.
snap も未だ 1.25 です.
ということで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 Codename: bookworm $ arch x86_64