scrcpy 5.0でハードウェアデコードに対応

Android端末をUSBや無線経由で画面表示や操作のできるScrcpyの5.0がリリースされました.

今回のハイライトはハードウェアデコード機能の追加.

laptopを少電力モードにしている状態で動画再生中のAndroidを画面転送していると再生が追いつかずどんどん映像と音がずれていたのですがこういったことが減りそうです.

Debian packageは結構古いです.

$ rmadison scrcpy
scrcpy     | 1.17-1          | oldoldstable                             | source, amd64, arm64, armhf, i386
scrcpy     | 3.3.4-1~bpo12+1 | oldstable-backports-sloppy-debug/contrib | source
scrcpy     | 3.3.4-1~bpo12+1 | oldstable-backports-sloppy/contrib       | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x
scrcpy     | 3.3.4-1~bpo13+1 | stable-backports-debug/contrib           | source
scrcpy     | 3.3.4-1~bpo13+1 | stable-backports/contrib                 | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x
scrcpy     | 4.1-1           | testing/contrib                          | source
scrcpy     | 4.1-1           | unstable-debug/contrib                   | source
scrcpy     | 4.1-1           | unstable/contrib                         | source
scrcpy     | 4.1-1+b1        | testing/contrib                          | amd64, arm64, armhf, i386, loong64, ppc64el, riscv64, s390x
scrcpy     | 4.1-1+b1        | unstable/contrib                         | amd64, arm64, armhf, i386, loong64, ppc64el, riscv64, s390x

scrcpyのsourceをpullして5.0で

$ git pull
$ git checkout v5.0
HEAD is now at 19871982 Update links to 5.0
$ git status
HEAD detached at v5.0
nothing to commit, working tree clean

buildは大変なので既製のサーバーを使用します.

$ ./install_release.sh

5.0になりました.

$ which scrcpy
/usr/local/bin/scrcpy
$ scrcpy --version
scrcpy 5.0 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
 - SDL: 3.4.16 / 3.4.16
 - libavcodec: 63.1.102 / 63.1.102
 - libavformat: 63.1.102 / 63.1.102
 - libavutil: 61.1.102 / 61.1.102
 - libavdevice: 63.1.102 / 63.1.102
 - libusb: - / 1.0.30

--hwdec オプションもあります.

$ scrcpy --help | grep -A7 -- --hwdec=
    --hwdec=mode
        Configure hardware video decoding on the computer.
        Possible values are "auto" (the first available hardware decoder,
        software decoding otherwise), "disabled" (always use software decoding),
        "vaapi" (Linux only), "d3d11va" (Windows only) and "videotoolbox" (macOS
        only).
        Default is "auto".

既定値では --hwdec=auto で vaapi になりました.

$ scrcpy
scrcpy 5.0 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     -->   (usb)  cfc15fe5                        device  P780
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 43.9 MB/s (733974 bytes in 0.016s)
[server] INFO: Device: [TINNO] Rakuten P780 (Android 11)
INFO: Renderer: opengl
INFO: OpenGL version: 4.6 (Compatibility Profile) Mesa 26.2.4-1
INFO: Trilinear filtering enabled
INFO: Trilinear filtering disabled for VA-API frames
INFO: Interop: vaapi
INFO: Video decoding: vaapi
INFO: Texture (VA-API): 720x1520

VA-APIで対応しているハードウェアデコードのコーデックは vainfo コマンドなどで確認できます.

$ vainfo
Trying display: wayland
Trying display: x11
libva info: VA-API version 1.24.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_24
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.24 (libva 2.23.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 26.2.4 ()
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSliceLP
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSliceLP
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointEncPicture
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSliceLP
      VAProfileVP8Version0_3          :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileVP9Profile0            :	VAEntrypointVLD
      VAProfileVP9Profile2            :	VAEntrypointVLD

Android側は scrcpy --list-encoders で確認できます.
恐らく(hw)となっているところがハードウェアエンコード.このPCとAndroidの組み合わせだとH.264かH.265になりそうです.

$ scrcpy --list-encoders
scrcpy 5.0 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     -->   (usb)  cfc15fe5                        device  P780
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 71.2 MB/s (733974 bytes in 0.010s)
[server] INFO: Device: [TINNO] Rakuten P780 (Android 11)
[server] INFO: List of video encoders:
    --video-codec=h264 --video-encoder=c2.qti.avc.encoder             (hw) [vendor]
    --video-codec=h264 --video-encoder=OMX.qcom.video.encoder.avc     (hw) [vendor] (alias for c2.qti.avc.encoder)
    --video-codec=h264 --video-encoder=c2.android.avc.encoder         (sw)
    --video-codec=h264 --video-encoder=OMX.google.h264.encoder        (sw) (alias for c2.android.avc.encoder)
    --video-codec=h265 --video-encoder=c2.qti.hevc.encoder            (hw) [vendor]
    --video-codec=h265 --video-encoder=OMX.qcom.video.encoder.hevc    (hw) [vendor] (alias for c2.qti.hevc.encoder)
    --video-codec=h265 --video-encoder=c2.qti.hevc.encoder.cq         (hw) [vendor]
    --video-codec=h265 --video-encoder=OMX.qcom.video.encoder.hevc.cq (hw) [vendor] (alias for c2.qti.hevc.encoder.cq)
    --video-codec=h265 --video-encoder=c2.android.hevc.encoder        (sw)
    --video-codec=vp8 --video-encoder=c2.android.vp8.encoder          (sw)
    --video-codec=vp8 --video-encoder=OMX.google.vp8.encoder          (sw) (alias for c2.android.vp8.encoder)
    --video-codec=vp9 --video-encoder=c2.android.vp9.encoder          (sw)
    --video-codec=vp9 --video-encoder=OMX.google.vp9.encoder          (sw) (alias for c2.android.vp9.encoder)
[server] INFO: List of audio encoders:
    --audio-codec=opus --audio-encoder=c2.android.opus.encoder        (sw)
    --audio-codec=aac --audio-encoder=c2.android.aac.encoder          (sw)
    --audio-codec=aac --audio-encoder=OMX.google.aac.encoder          (sw) (alias for c2.android.aac.encoder)
    --audio-codec=flac --audio-encoder=c2.android.flac.encoder        (sw)
    --audio-codec=flac --audio-encoder=OMX.google.flac.encoder        (sw) (alias for c2.android.flac.encoder)

laptopを少電力モードにして動画再生中のAndroidの画面を転送してみると訪れもなくなったようです.
ということて低スペックマシンなどで遅いと思っていた方なんかには嬉しい変更です.

Note

F-Droidで見かけたのですが,Android → Android の画面転送のできるAndroid版scrcpyもありました.(未検証)

Likes

Reposts

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

Your post must include a link to this post.

How does this work?
Write a response on your own website and include a link to this post. Then submit your response’s URL here. Your response may appear here after moderation. To update or remove it, edit or delete your original post and submit the same URL again. Learn more about Webmentions.