scrcpy – matoken's blog https://matoken.org/blog Is there no plan B? Sun, 24 Nov 2024 21:56:56 +0000 ja hourly 1 https://wordpress.org/?v=6.8 https://matoken.org/blog/wp-content/uploads/2025/03/cropped-1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9-32x32.jpeg scrcpy – matoken's blog https://matoken.org/blog 32 32 scrcpy v3.0で仮想ディスプレイを使う https://matoken.org/blog/2024/11/25/using-virtual-display-with-scrcpy-v3-0/ https://matoken.org/blog/2024/11/25/using-virtual-display-with-scrcpy-v3-0/#respond Sun, 24 Nov 2024 21:56:51 +0000 https://matoken.org/blog/?p=4256

scrcpyの導入

例によってメインデスクトップ環境のDebian sid amd64に導入します.
Linux環境への手順は doc/linux.md に書かれています.GitHubではこちら.

ここではgit経由のsourceから導入します.

$ 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 3.0 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
 - SDL: 2.30.9 / 2.30.9
 - libavcodec: 61.19.100 / 61.19.100
 - libavformat: 61.7.100 / 61.7.100
 - libavutil: 59.39.100 / 59.39.100
 - libavdevice: 61.3.100 / 61.3.100
 - libusb: - / 1.0.27
  1. 必要なパッケージの導入

  2. sourceのclone

  3. インストールスクリプトの実行

  4. scrcpyの場所を確認

  5. バージョンの確認

仮想ディスプレイを試す

scrcpy v3.0が入ったので早速仮想ディスプレイを試してみます. --new-display オプションに好みで解像度を指定できます.

$ scrcpy --new-display=720x1608
scrcpy 3.0 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     -->   (usb)  ZT322L25CF                      device  moto_g24
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 147.9 MB/s (90224 bytes in 0.001s)
[server] INFO: Device: [motorola] motorola moto g24 (Android 14)
INFO: Renderer: opengl
INFO: OpenGL version: 4.6 (Compatibility Profile) Mesa 24.2.7-1
INFO: Trilinear filtering enabled
INFO: Texture: 720x1608
[server] INFO: New display: 720x1608/237 (id=3)

一部のアプリケーションが配置されています.寂しいですね.

scrcpy v3.0 vd 01

scrcpyに --start-app= オプションを指定することで好みのアプリケーションが起動できます.その前に list-apps オプションで起動したいアプリケーションを確認します.ここではニコニコ動画を起動しています.

$ scrcpy list-apps | grep nico
 - ニコニコ動画                         jp.nicovideo.android
 - ニコニコ生放送                        jp.co.dwango.nicocas
$ scrcpy --new-display=1608x720 --start-app=jp.nicovideo.android

scrcpy v3.0 vd 02

普通に視聴できました.
このときAndroid本体はディプレイは消えたままです.ロックを解除して別のアプリを使うこともできます.
仮想ディスプレイで実行中のアプリを起動するとアプリは本体側に移り,仮想ディスプレイにはデスクトップが表示されました.
仮想ディスプレイでニコニコ動画を再生しつつ本体でYouTube動画を再生してみると,両方の音声がPC側から出ました.

これまでも本体画面を消灯して使うといったことはできましたが,通知が来て別のアプリをちょっと確認したいみたいなときなどアプリを切り替える必要があり面倒でした.この仮想ディスプレイは別のディスプレイ扱いでそういうときにも2つの画面が同時に使えて便利です.
それに画面ロックを解除する必要がないのも便利です.(これは選べると嬉しいけど)

scrcpyと組み合わせて使うのにAndroidベースのTV StickやTV Boxのようなものが欲しくなります.

環境

PC環境
$ scrcpy -v
scrcpy 3.0 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
 - SDL: 2.30.9 / 2.30.9
 - libavcodec: 61.19.100 / 61.19.100
 - libavformat: 61.7.100 / 61.7.100
 - libavutil: 59.39.100 / 59.39.100
 - libavdevice: 61.3.100 / 61.3.100
 - libusb: - / 1.0.27
 $ 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     1:34.0.5-3
ffmpeg  7:7.1-3
gcc     4:14.2.0-1
git     1:2.45.2-1.2
libavcodec-dev:amd64    7:7.1-3
libavdevice-dev:amd64   7:7.1-3
libavformat-dev:amd64   7:7.1-3
libavutil-dev:amd64     7:7.1-3
libsdl2-2.0-0:amd64     2.30.9+dfsg-1
libsdl2-dev:amd64       2.30.9+dfsg-1
libswresample-dev:amd64 7:7.1-3
libusb-1.0-0:amd64      2:1.0.27-1+b1
libusb-1.0-0-dev:amd64  2:1.0.27-1+b1
meson   1.6.0-1
ninja-build     1.12.1-1
pkg-config:amd64        1.8.1-4
wget    1.24.5-2+b1
$ lsb_release -dr
Description:    Debian GNU/Linux trixie/sid
Release:        n/a
$ arch
x86_64
Android環境
$ adb shell dumpsys package com.nextcloud.client | grep versionName=
    versionName=3.29.2
$ adb shell getprop ro.build.version.release
14
$ adb shell getprop ro.build.version.sdk
34
$ adb shell getprop ro.build.id
UTA34.82-90
$ adb shell getprop ro.product.model
moto g24

]]>
https://matoken.org/blog/2024/11/25/using-virtual-display-with-scrcpy-v3-0/feed/ 0
scrcpy 2.7を使いPCのゲームパッドでAndroidのゲームを遊ぶ https://matoken.org/blog/2024/09/17/play-android-games-with-pc-gamepad-using-scrcpy-2-7/ https://matoken.org/blog/2024/09/17/play-android-games-with-pc-gamepad-using-scrcpy-2-7/#respond Mon, 16 Sep 2024 21:49:42 +0000 https://matoken.org/blog/?p=4101

Android 端末の画面,音声転送や操作も出来る scrcpy の v2.7 がリリースされました.
今回ゲームパッドに対応したようなので試してみました.
PC に接続されたゲームパッドでAndroid が操作できるようになります.

過去の scrcpy の記事

Linux 架橋への導入はこちらに.

いくつかの環境ではパッケージで最新版が導入できそうですが,今回試す Debian sid amd64 環境では 1.25-1+b1 とちょっと前のバージョンなので 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
source clone & build & install
$ git clone https://github.com/Genymobile/scrcpy
$ cd scrcpy
$ ./install_release.sh
確認
$ which scrcpy
/usr/local/bin/scrcpy

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

Dependencies (compiled / linked):
 - SDL: 2.30.7 / 2.30.7
 - libavcodec: 61.3.100 / 61.3.100
 - libavformat: 61.1.100 / 61.1.100
 - libavutil: 59.8.100 / 59.8.100
 - libavdevice: 61.1.100 / 61.1.100
 - libusb: - / 1.0.27

scrcpy 2.7 が導入できました.

Android が adb コマンドで見えるのを確認
$ adb devices
List of devices attached
ZT322L25CF      device

利用したい Android が adb コマンドで見えるのを確認して,scrcpy を -G オプションをつけて実行します.

Note

Android端末が見えない場合以下のページを参考に.
Android端末をudev roureに登録,udev rule の反映,Android 端末での USB debug の有効化を行います.

$ scrcpy -G

scrcpy 2.7 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     -->   (usb)  ZT322L25CF                      device  moto_g24
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 135.1 MB/s (71200 bytes in 0.001s)
[server] INFO: Device: [motorola] motorola moto g24 (Android 14)
INFO: Renderer: opengl
INFO: OpenGL version: 4.6 (Compatibility Profile) Mesa 24.2.2-1
INFO: Trilinear filtering enabled
INFO: Texture: 720x1608
[server] WARN: Could not get initial audio timestamp

この状態でAndroid のゲームパッド対応ゲームを起動して,PC に接続されたゲームパッド(今回は XBox360 コントローラー)で操作できるのを確認します.

Android のゲームパッド対応ゲームは以下のページを参考に「The Ramp」というスケボーを使ってランプで遊ぶゲームを入れて試してみました.

scrcpy 2.7 game

10分ほど試しただけですが,違和感なく遊べそうです.

PC環境
$ scrcpy -v
scrcpy 2.7 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
 - SDL: 2.30.7 / 2.30.7
 - libavcodec: 61.3.100 / 61.3.100
 - libavformat: 61.1.100 / 61.1.100
 - libavutil: 59.8.100 / 59.8.100
 - libavdevice: 61.1.100 / 61.1.100
 - libusb: - / 1.0.27
$ lsb_release -dr
Description:    Debian GNU/Linux trixie/sid
Release:        n/a
$ arch
x86_64
Android環境
$ adb shell dumpsys package com.nextcloud.client | grep versionName=
    versionName=3.29.2
$ adb shell getprop ro.build.version.release
14
$ adb shell getprop ro.build.version.sdk
34
$ adb shell getprop ro.build.id
UTA34.82-73
$ adb shell getprop ro.product.model
moto g24

]]>
https://matoken.org/blog/2024/09/17/play-android-games-with-pc-gamepad-using-scrcpy-2-7/feed/ 0
Andorid の画面をPC に転送して操作も出来るScrcpy 2.0 でオーディオ転送にも対応 https://matoken.org/blog/2023/03/13/scrcpy-2-0-audio/ https://matoken.org/blog/2023/03/13/scrcpy-2-0-audio/#respond Sun, 12 Mar 2023 21:45:00 +0000 https://matoken.org/blog/?p=3881

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
  1. 関連パッケージの導入
  2. scrcpy のclone
  3. build&install script の実行
  4. インストールパスの確認
  5. バージョンの確認
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)
  1. AndroidデバイスのVID/PIDを確認
  2. udevへ登録
  3. udevをリロードして反映
  4. 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 接続と違い遅延も感じません.

scrcpy2.0 duolingo

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

scrcpy2.0 pulseaudio

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

]]>
https://matoken.org/blog/2023/03/13/scrcpy-2-0-audio/feed/ 0
snap版scrcpyでAndroidデバイス画面をビデオデバイスに出力 https://matoken.org/blog/2022/03/29/output-android-device-screen-to-video-device-with-snap-version-scrcpy/ https://matoken.org/blog/2022/03/29/output-android-device-screen-to-video-device-with-snap-version-scrcpy/#comments Tue, 29 Mar 2022 11:20:37 +0000 http://matoken.org/blog/?p=3559

Androidアプリの画面をsnap版のscrcpyでビデオデバイスに流し込もうとしたら少しハマったのでメモしておきます.

Debian Bullseye amd64のscrcpyでAndroidの画面をビデオデバイスに出力してみようと --v4l2-sink オプションを指定したところバージョンが古く未対応でした.

$ /bin/scrcpy --v4l2-sink /dev/video8
/bin/scrcpy: unrecognized option '--v4l2-sink'

Debian sidの 1.23-1 だと存在するオプションなのですがそれを入れると依存関係がおかしくなりそうなので避けたいところ.

Androidアプリの画面をsnap版のscrcpyでビデオデバイスに流し込もうとしたら少しハマったのでメモしておきます.


Debian Bullseye amd64のscrcpyでAndroidの画面をビデオデバイスに出力してみようと --v4l2-sink オプションを指定したところバージョンが古く未対応でした.

$ /bin/scrcpy --v4l2-sink /dev/video8
/bin/scrcpy: unrecognized option '--v4l2-sink'

Debian sidの 1.23-1 だと存在するオプションなのですがそれを入れると依存関係がおかしくなりそうなので避けたいところ.

$ rmadison scrcpy
scrcpy     | 1.17-1        | stable         | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x
scrcpy     | 1.23-1        | unstable       | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x
scrcpy     | 1.23-1        | unstable-debug | source

snapを確認すると1.23のようなのでこれを導入してみました.

$ snap find scrcpy
Name       Version  Publisher   Notes  Summary
scrcpy     v1.23    sisco311    -      Display and control your Android device
guiscrcpy  v4.9.0   srevinsaju  -      An opensource graphical user interface for Android screen mirroring
$ snao install scrcpy
$ snap info scrcpy
name:      scrcpy
summary:   Display and control your Android device
publisher: sisco311
store-url: https://snapcraft.io/scrcpy
contact:   https://github.com/sisco311/scrcpy-snap/issues
license:   Apache-2.0
description: |
  This application provides display and control of Android devices connected on USB (or over
  TCP/IP). It does not require any root access.

  This is an unofficial snap. The code of scrcpy can be found at:
  https://github.com/Genymobile/scrcpy
commands:
  - scrcpy.adb
  - scrcpy
snap-id:      M7yvgnqOvyQj64bolfpawIAEwHv7dQ5G
tracking:     latest/stable
refresh-date: today at 01:27 JST
channels:
  latest/stable:    v1.23             2022-03-03 (379)  87MB -
  latest/candidate: ↑
  latest/beta:      v1.23-2-gadbe7908 2022-03-02 (376)  87MB -
  latest/edge:      v1.21-2-g5704ec6  2021-12-07 (358) 101MB -
installed:          v1.23                        (379)  87MB -

1.23です.

$ which scrcpy
/snap/bin/scrcpy
$ scrcpy --version
scrcpy 1.23 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
 - SDL: 2.0.8 / 2.0.8
 - libavcodec: 57.107.100 / 57.107.100
 - libavformat: 57.83.100 / 57.83.100
 - libavutil: 55.78.100 / 55.78.100
 - libavdevice: 57.10.100 / 57.10.100
 - libusb: - / 1.0.21

早速使おうと思いましたがエラーとなってしまいました.

$ scrcpy --v4l2-sink /dev/video8
scrcpy 1.23 <https://github.com/Genymobile/scrcpy>
INFO: Video orientation is locked for v4l2 sink. See --lock-video-orientation.
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed. 6.8 MB/s (41123 bytes in 0.006s)
[server] INFO: Device: motorola moto g31(w) (Android 11)
INFO: Renderer: opengl
INFO: OpenGL version: 3.0 Mesa 20.0.8
INFO: Trilinear filtering enabled
INFO: Initial texture: 1080x2400
ERROR: Failed to open output device: /dev/video8
ERROR: Could not open frame sink 1
ERROR: Could not open decoder sinks
ERROR: Could not open packet sink 0
ERROR: Could not open demuxer sinks
WARN: Device disconnected
WARN: Killing the server...

このデバイスは存在するし,別のアプリケーションから動画を流し込むと動作します.

issueを検索すると以下のコメントを見つけました.

以下のコマンドでsnapのscrcpyにビデオデバイスを接続する必要があるようです.

$ snap connect scrcpy:camera

認識させたあと実行するとうまく行きました.

$ scrcpy --v4l2-sink /dev/video8 --lock-video-orientation --max-size=720 -N
scrcpy 1.23 <https://github.com/Genymobile/scrcpy>
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed. 10.6 MB/s (41123 bytes in 0.004s)
[server] INFO: Device: motorola moto g31(w) (Android 11)
INFO: v4l2 sink started to device: /dev/video8

scrcpy snap2video

環境
$ snap info scrcpy | grep installed:
installed:          v1.23                        (379)  87MB -
$ dpkg-query -W snap v4l2loopback-dkms v4l2loopback-source v4l2loopback-utils
snap
v4l2loopback-dkms       0.12.5-1
v4l2loopback-source     0.12.5-1
v4l2loopback-utils      0.12.5-1
$ lsb_release -dr
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11
$ uname -a
Linux yoga-260 5.16.15-le9 #10 SMP PREEMPT Sat Mar 19 01:52:06 JST 2022 x86_64 GNU/Linux
$ arch
x86_64
$ rmadison scrcpy
scrcpy     | 1.17-1        | stable         | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x
scrcpy     | 1.23-1        | unstable       | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x
scrcpy     | 1.23-1        | unstable-debug | source

snapを確認すると1.23のようなのでこれを導入してみました.

$ snap find scrcpy
Name       Version  Publisher   Notes  Summary
scrcpy     v1.23    sisco311    -      Display and control your Android device
guiscrcpy  v4.9.0   srevinsaju  -      An opensource graphical user interface for Android screen mirroring
$ snao install scrcpy
$ snap info scrcpy
name:      scrcpy
summary:   Display and control your Android device
publisher: sisco311
store-url: https://snapcraft.io/scrcpy
contact:   https://github.com/sisco311/scrcpy-snap/issues
license:   Apache-2.0
description: |
  This application provides display and control of Android devices connected on USB (or over
  TCP/IP). It does not require any root access.

  This is an unofficial snap. The code of scrcpy can be found at:
  https://github.com/Genymobile/scrcpy
commands:
  - scrcpy.adb
  - scrcpy
snap-id:      M7yvgnqOvyQj64bolfpawIAEwHv7dQ5G
tracking:     latest/stable
refresh-date: today at 01:27 JST
channels:
  latest/stable:    v1.23             2022-03-03 (379)  87MB -
  latest/candidate: ↑
  latest/beta:      v1.23-2-gadbe7908 2022-03-02 (376)  87MB -
  latest/edge:      v1.21-2-g5704ec6  2021-12-07 (358) 101MB -
installed:          v1.23                        (379)  87MB -

1.23です.

$ which scrcpy
/snap/bin/scrcpy
$ scrcpy --version
scrcpy 1.23 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
 - SDL: 2.0.8 / 2.0.8
 - libavcodec: 57.107.100 / 57.107.100
 - libavformat: 57.83.100 / 57.83.100
 - libavutil: 55.78.100 / 55.78.100
 - libavdevice: 57.10.100 / 57.10.100
 - libusb: - / 1.0.21

早速使おうと思いましたがエラーとなってしまいました.

$ scrcpy --v4l2-sink /dev/video8
scrcpy 1.23 <https://github.com/Genymobile/scrcpy>
INFO: Video orientation is locked for v4l2 sink. See --lock-video-orientation.
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed. 6.8 MB/s (41123 bytes in 0.006s)
[server] INFO: Device: motorola moto g31(w) (Android 11)
INFO: Renderer: opengl
INFO: OpenGL version: 3.0 Mesa 20.0.8
INFO: Trilinear filtering enabled
INFO: Initial texture: 1080x2400
ERROR: Failed to open output device: /dev/video8
ERROR: Could not open frame sink 1
ERROR: Could not open decoder sinks
ERROR: Could not open packet sink 0
ERROR: Could not open demuxer sinks
WARN: Device disconnected
WARN: Killing the server...

このデバイスは存在するし,別のアプリケーションから動画を流し込むと動作します.

issueを検索すると以下のコメントを見つけました.

以下のコマンドでsnapのscrcpyにビデオデバイスを接続する必要があるようです.

$ snap connect scrcpy:camera

認識させたあと実行するとうまく行きました.

$ scrcpy --v4l2-sink /dev/video8 --lock-video-orientation --max-size=720 -N
scrcpy 1.23 <https://github.com/Genymobile/scrcpy>
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed. 10.6 MB/s (41123 bytes in 0.004s)
[server] INFO: Device: motorola moto g31(w) (Android 11)
INFO: v4l2 sink started to device: /dev/video8

scrcpy snap2video

環境
$ snap info scrcpy | grep installed:
installed:          v1.23                        (379)  87MB -
$ dpkg-query -W snap v4l2loopback-dkms v4l2loopback-source v4l2loopback-utils
snap
v4l2loopback-dkms       0.12.5-1
v4l2loopback-source     0.12.5-1
v4l2loopback-utils      0.12.5-1
$ lsb_release -dr
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11
$ uname -a
Linux yoga-260 5.16.15-le9 #10 SMP PREEMPT Sat Mar 19 01:52:06 JST 2022 x86_64 GNU/Linux
$ arch
x86_64

]]>
https://matoken.org/blog/2022/03/29/output-android-device-screen-to-video-device-with-snap-version-scrcpy/feed/ 2
scrcpyを使ってAndroidスマートフォンの動画をPCで視聴する https://matoken.org/blog/2022/03/29/watch-videos-on-your-android-smartphone-on-your-pc-using-scrcpy/ https://matoken.org/blog/2022/03/29/watch-videos-on-your-android-smartphone-on-your-pc-using-scrcpy/#comments Mon, 28 Mar 2022 22:20:14 +0000 http://matoken.org/blog/?p=3555

今日最終回でしたが,マンガUp!というアプリで他のsiteより12時間早く配信されているのに気づきました.でもモバイルアプリでないと視聴できません.手元ではスマートフォンしか無いので画面が小さい.

そういえば以前試したscrcpyだと画面キャプチャ禁止のアプリでも大丈夫だったのでこれでPCに画面転送してそちらで視聴すればいつもの画面で視聴できるのではと試してみました.

Note
音声についてはscrcpyのaudioブランチを自分でbuildして --forward-audio オプションを利用することで転送できそう ですが私は未確認で現在はBluetooth A2DP-source でPCに転送しています.3.5mm Audio cableなどでも良さそうです.

まずは以前試したページを参考にscrcpyを使えるようにします.

さくっと動いたのですが,スマートフォンとPCのアスペクト比が違うので黒枠が出来ていまいちです.

$ /bin/scrcpy
INFO: scrcpy 1.17 <https://github.com/Genymobile/scrcpy>
/usr/share/scrcpy/scrcpy-server: 1 file pushed. 5.7 MB/s (34015 bytes in 0.006s)
[server] INFO: Device: motorola moto g31(w) (Android 11)
INFO: Renderer: opengl
INFO: OpenGL version: 4.6 (Compatibility Profile) Mesa 20.3.5
INFO: Trilinear filtering enabled
INFO: Initial texture: 2400x1080

scrcpy bar

PCの解像度は 1366×720 でスマートフォンは 2480×1080 なのでスマートフォン画面を真ん中だけくり抜くと良さそうです. --crop オプションを使ってみます.

$ scrcpy --crop=1080:1920:0:$(( (2480-1920)/2 )) \ (1)
    --encoder OMX.google.h264.encoder \ (2)
    --max-size=1366 \ (3)
    --fullscreen (4)
INFO: scrcpy 1.17 <https://github.com/Genymobile/scrcpy>
/usr/share/scrcpy/scrcpy-server: 1 file pushed. 7.2 MB/s (34015 bytes in 0.005s)
[server] INFO: Device: motorola moto g31(w) (Android 11)
INFO: Renderer: opengl
INFO: OpenGL version: 4.6 (Compatibility Profile) Mesa 20.3.5
INFO: Trilinear filtering enabled
INFO: Initial texture: 1360x768
  1. --crop で真ん中をくり抜き
  2. エンコーダにPCでハードウェア対応しているH.264を利用
  3. サイズをPCに合わせて制限
  4. フルスクリーン表示

うまくいきました :)

scrcpy crop

他のPCでは動かないけどスマートフォンでは動くものでも応用が効きそうです.

環境
$ dpkg-query -W scrcpy adb
adb     1:10.0.0+r36-7
scrcpy  1.17-1
$ lsb_release -dr
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11
$ arch
x86_64

]]>
https://matoken.org/blog/2022/03/29/watch-videos-on-your-android-smartphone-on-your-pc-using-scrcpy/feed/ 1
PCでAndroid端末の画面転送と操作が出来るscrcpy https://matoken.org/blog/2020/12/10/scrcpy-that-can-transfer-and-operate-the-screen-of-android-terminal-with-pc/ https://matoken.org/blog/2020/12/10/scrcpy-that-can-transfer-and-operate-the-screen-of-android-terminal-with-pc/#comments Thu, 10 Dec 2020 13:15:14 +0000 http://matoken.org/blog/?p=2891

Debian sid amd64環境ではパッケージがあるので簡単です,armhf/amd64/i386環境ではsnap版が存在します.その他幾つかのLinuxディストリビューションではパッケージがあったり,WindowsやmacOSでも動作するようです.

手元ではDebian sid amd64で動作しました.(Raspberry Pi OS armhfにsnap版を入れた環境ではエラーが発生.内容は未だ未確認)

Debian sid amd64環境だと以下のような感じで導入できました.このときAndroid端末は「開発者向けオプション」が有効になっていて,「USBデバッグ」が有効になっている状態でUSB接続されている必要があります.

Debian sid amd64環境での導入例
$ sudo apt install adb scrcpy (1)
$ lsusb (2)
  :
Bus 002 Device 013: ID 05c6:9024 Qualcomm, Inc. SDM439-MTP _SN:472BF8D8
  :
$ echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="05c6" ATTR{idProduct}=="9024", MODE="0660", GROUP="plugdev", SYMLINK+="android%n"' \
| sudo tee -a /etc/udev/rules.d/51-android.rules (3)
$ sudo udevadm control --reload (4)
$ adb devices (5)
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
976d6a56        device
  1. 必要パッケージの導入
  2. AndroidのVID/PIDを確認(ここでは 05c6:9024 )
  3. adbコマンドが利用できるようにAndroid端末をudev roureに登録
  4. udev ruleを反映する
  5. adbコマンドで認識出来るのを確認

この状態で,scrcpy を実行することでAndroidの画面転送が出来ました.普通に操作も出来ます.
スリープ状態のときは画面が真っ黒ですが,マウス右クリックで解除されます.

$ scrcpy
INFO: scrcpy 1.14 <https://github.com/Genymobile/scrcpy>
/usr/share/scrcpy/s...93 bytes in 0.008s)
[server] INFO: Device: TINNO C330 (Android 9)
INFO: OpenGL shaders: ENABLED
INFO: Created renderer: opengl
INFO: Renderer: opengl
INFO: OpenGL version: 3.0 Mesa 20.2.4
INFO: Trilinear filtering enabled
INFO: Initial texture: 720x1280

20201210 21:12:59 2112960.resized20201210 21:12:31 2113779.resized20201210 21:12:30 2115127.resized

導入も簡単だしこれは便利.しかしメイン端末ではPCにUSB接続するとすぐに充電しなくなってしまうので長時間は使えません.

adb のワイヤレス接続の設定をすると別の端末や充電器で充電しながら利用できそうなので試してみました.

対象のAndroid端末をPCにUSB接続した状態で tcpip コマンドでリモート接続できるようにします.

$ adb tcpip 5555
restarting in TCP mode port: 5555

この状態でPCからAndroid端末を取り外し,Wi-Fi接続のIPアドレスを確認します.

PCでadbコマンドでAndroid端末に接続します.

$ adb connect <ANDROID_IP>>:5555

この状態で scrcpy コマンドを実行すると画面が表示され操作できます.充電器などに接続した状態でも利用できます :)

scrcpy には幾つかオプションがあります.便利そうなものとしては最大解像度を指定する -m, --max-size value で解像度を下げて表示できます,
-n, --no-control で表示だけで操作できなくします.
-r, --record file で画面を録画します.
-w, --stay-awake でscrcpyを実行中Android画面をロック,消灯しません.
-S, --turn-screen-off Android端末のスクリーンを消したまま操作できます.

ショートカットでは
Ctrl + h, マウス中キー でホームボタン,
Ctrl + r でAndroid画面回転,
Ctrl + s でアプリケーション切り替え,
辺りが便利そうです,

Ctrl + c でクリップボードのコピーなのですが,一旦Android側でコピーした後に Ctrl + c でPCへのクリップボードコピーのようです,Ctrl + v の貼り付けもAndroid感での貼り付けで,PCからAndroidのクリップボード貼り付けは Ctrl + Shift + v でした.

詳細は scrcpy --help を参照してください.

これでElectronアプリでPCで動かしているアプリをスマホで……とも思ったのですが日本語入力などはちょっと面倒.もう少し様子見しようと思います.

]]>
https://matoken.org/blog/2020/12/10/scrcpy-that-can-transfer-and-operate-the-screen-of-android-terminal-with-pc/feed/ 3